php - WooCommerce 预订 : adding and reordering item data in cart and checkout

标签 php wordpress woocommerce cart woocommerce-bookings

我想显示预订的结束日期和开始日期。现在到目前为止我有以下内容:

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) 更好的方法是将开始日期和结束日期放在一起作为元数据的相同位。

谢谢!

最佳答案

Code lightly updated

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

But is not possible to have the start and end date together (because you can only have in the array 1 key, 1 value and 1 display). What is may be possible is to merge the both values and the both displays together.

如果需要,显示$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 文件中或任何插件文件中。

该代码已使用其他设置进行了测试,应该适合您。

关于php - WooCommerce 预订 : adding and reordering item data in cart and checkout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42346869/

相关文章:

php - Drupal 8 自定义 block (模块)创建 Twig 模板文件

html - 带有CSS的盒子中的盒子

css - 删除 css wordpress 中的所有默认样式

html - 仅在计算机屏幕上应用 CSS 规则,而不是在手机和平​​板电脑上

wordpress - 你如何在woocommerce中为产品添加星级?

php - 使用 Apache/PHP 终止传入的 PUT 数据

javascript - ajax html响应自定义显示

php - 为什么我的产品不能环绕我的形象?我需要它们环绕我的 float 图像

php - WooCommerce 管理员订单编辑保存帖子

php - 获取相关项目并将其输出为链接