WooCommerce预订:在购物车和结帐中添加和重新排序商品数据

问题描述:

我想显示预订的结束日期以及开始日期。现在到目前为止,我有以下几种:WooCommerce预订:在购物车和结帐中添加和重新排序商品数据

add_filter('woocommerce_get_item_data', 'display_booking_date', 10, 2); 
function display_booking_date($item_data, $cart_item){ 

    if (! empty($cart_item['booking'])) { 

     $date_format = apply_filters('woocommerce_bookings_date_format', wc_date_format()); 
     $end_date = apply_filters('woocommerce_bookings_get_end_date_with_time', date_i18n($date_format, $cart_item['booking']['_end_date'])); 

     $item_data[] = array(
      'key' => __('End Date', 'your-textdomain'), 
      'value' => $cart_item['booking']['_end_date'], 
      'display' => $end_date, 
     ); 
    } 
    return $item_data; 
} 

这使我可以显示预订的结束日期。但是,这是在任何其他元数据之后,这不是我想要的。有没有一种办法,我既可以:

1)凡截止日期出现,使其出现于开始日期,而不是在所有的其他元数据

2的变化),更妙的是将有开始和结束日期一起作为元数据的同一位。

谢谢!

码轻轻更新

是的,这是可能的,但你必须知道的项目数据key为“开始日期” ......在这里,我重新排序的项目的数据。

但不可能将开始日期和结束日期放在一起(因为您只能在数组1键,1值和1显示中)。可能的是将两个值和两个显示合并在一起。

如果需要的话,显示$item_data说法的原始数据,你可以在结尾使用print_r($item_data);自己的函数中前return

这里是代码:

add_filter('woocommerce_get_item_data', 'display_booking_date', 10, 2); 
function display_booking_date($item_data, $cart_item){ 

    if (! empty($cart_item['booking'])) { 

     // ==> HERE define your real START DATE 'name' 
     $item_data_start_date_name = __('Start Date', 'your-textdomain'); // or just 'Start Date' … 

     $date_format = apply_filters('woocommerce_bookings_date_format', wc_date_format()); 
     $end_date = apply_filters('woocommerce_bookings_get_end_date_with_time', date_i18n($date_format, $cart_item['booking']['_end_date'])); 

     $item_data_end_date_array = array(
      'key' => __('End Date', 'your-textdomain'), 
      'value' => $cart_item['booking']['_end_date'], 
      'display' => $end_date, 
     ); 

     $new_item_data = array(); 
     $count = 0; 

     //iteratting throug each item_data values 
     foreach($item_data as $key => $value){ 
      // If we find the "start date" we set just afer the "end date" 
      if($value['name'] == $item_data_start_date_name){ 
       $new_item_data[$count] = $value; 
       $count++; 
       $new_item_data[$count] = $item_data_end_date_array; 
       $count++; 
      } else { 
       $new_item_data[$count] = $value; 
       $count++; 
      } 
     } 
     return $new_item_data; 
    } else { 
     return $item_data; 
    } 
} 

代码放在您的活动子主题(或主题)的function.php文件或也以任何插件文件。

该代码已与其他设置进行测试,并应为您工作。

+0

嗨Loic,谢谢你的帮助。我似乎得到了一个警告,虽然它说以下内容: 警告:在/ home/jonath59/public_html/lashis/wp-content/plugins/woocommerce/includes/class-wc-cart中为foreach()提供了无效参数。 php on line 591 任何想法可能会导致这种情况? – DigM

+0

嗨Loic,你编辑的答案几乎奏效。我似乎没有从我的item_data中返回键,并且它正在发出警告。相反,我似乎越来越['名称'],所以我改变了if语句来说if($ value ['name'] == $ item_data_start_date_key)然后工作。 – DigM

+0

是的。谢谢你的帮助! – DigM