2

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

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) 更好的办法是将开始日期和结束日期放在同一个元数据中。

谢谢!

4

1 回答 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 文件中或任何插件文件中。

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

于 2017-02-20T16:24:21.027 回答