WooCommerce Bookings: получение данных о бронировании до создания заказа.

Я использую плагин WooCommerce Bookings и в настоящее время хочу отображать дополнительную информацию в сводке бронирования (варианты продукта).

Для этого я использую следующий хук: woocommerce_admin_booking_data_after_booking_details

Если мое бронирование связано с заказом, я получаю свои данные с помощью функции wc_get_order_item_meta

Я хотел бы иметь возможность получать свои данные, когда бронирование еще не является заказом (например, просто добавлено в корзину).

Просматривая базу данных, я увидел, что информация хранится в таблице woocommerce_sessions.

В крючке, который я использую, у меня есть доступ только к идентификатору бронирования.

Можно ли получить соответствующий сеанс из этого?

Спасибо

ОБНОВЛЕНИЕ

add_filter('woocommerce_admin_booking_data_after_booking_details', function ($booking_id) {
global $wpdb;
$booking = get_wc_booking($booking_id);
$order = $booking->get_order();
if ($order) {
    foreach ($order->get_items() as $item) {
        $item_meta = wc_get_order_item_meta($item->get_id(), '', FALSE);
        /* Your code */
    }
} else {
    $table = $wpdb->prefix . 'woocommerce_sessions';
    $condition = '%booking_id____' . $booking_id . '%';
    $sql = "SELECT session_value FROM $table WHERE session_value LIKE '$condition'";
    $query = maybe_unserialize($wpdb->get_var($sql));
    $cart_items = maybe_unserialize($query['cart']);
    foreach ($cart_items as $item) {
        /* Your code */
    }
}
}, 10, 1);

person Antoine    schedule 20.04.2017    source источник


Ответы (1)


Вы можете получить доступ к этим данным с помощью метода WC_Cart get_cart() или get_cart_from_session().

Вы должны использовать цикл foreach двумя способами:

foreach(WC()->cart->get_cart() as $cart_item_key => $item_values){
    // Outputting the raw Cart items data to retrieve Bookings related data
    echo '<pre>'; print_r($item_values);  echo '</pre>';
}

Or

foreach(WC()->cart->get_cart() as $cart_item_key => $item_values){
    // Outputting the raw Cart items data to retrieve Bookings related data
    echo '<pre>'; print_r($item_values);  echo '</pre>';
}

Вы можете просто получить правильный путь к данным и имена в этой подключенной функции (отображение будет происходить на странице корзины, например, здесь):

add_action( 'woocommerce_before_cart_table', 'my_custom_cart_items_raw_output');
function my_custom_cart_items_raw_output() {
    foreach(WC()->cart->get_cart() as $cart_item_key => $item_values){
        // Outputting the raw Cart items data to retrieve Bookings related data
        echo '<pre>'; print_r($item_values);  echo '</pre>';
    }
}

Код находится в файле function.php вашей активной дочерней темы (или темы) или также в любом файле плагина.

Этот код протестирован и работает.

Найдя пути, имена и путь к данным, вы можете удалить его (только для тестов и разработки)…

person LoicTheAztec    schedule 20.04.2017
comment
Спасибо за помощь. Однако я хочу отображать данные в панели администратора, и у меня нет доступа к корзине, а только к идентификатору бронирования. - person Antoine; 20.04.2017
comment
@Antoine Это будет намного сложнее, поскольку единственный способ - получить данные из сеансов ... Таким образом, вы должны сначала получить данные всех сеансов тележки, затем обработать эти данные в нескольких циклах foreach, чтобы получить reservetion_id, а затем Свяжите с каждым reservetion_id правильные данные, которые вы хотите ... все это в специальной функции ... Вы можете использовать $ wpdb для получения данных в запросе SQL. Но это будет довольно сложно, и вы не сможете всегда получить определенного пользователя. - person LoicTheAztec; 20.04.2017
comment
Хорошо, я вижу. Мне нужно выполнить специальный запрос, чтобы получить все сеансы корзины, или есть собственная функция? - person Antoine; 20.04.2017
comment
@Antoine Humm ... Не думаю, что для этого есть что-то родное. путь - это SQL-запрос и время. Но помните, что вы не всегда сможете получить определенного пользователя. Пользователь будет определен, если он вошел в систему. - person LoicTheAztec; 20.04.2017
comment
Глядя на содержимое таблицы, это на самом деле окажется сложным ... Товар может быть добавлен в корзину пользователем, который не вошел в систему. Спасибо за ваше время :) - person Antoine; 20.04.2017