Заказы 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) Еще лучше было бы иметь начальную и конечную дату вместе как один и тот же бит метаданных.

Спасибо!

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 вашей активной дочерней темы (или темы) или также в любой файл плагина.

Код протестирован с другими настройками и должен работать на вас.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]