【问题标题】:WooCommerce Bookings: Retrieve the booking data before order is createdWooCommerce 预订:在创建订单之前检索预订数据
【发布时间】:2017-04-20 15:26:16
【问题描述】:

我正在使用 WooCommerce 预订插件,我目前希望在预订摘要(产品选项)中显示更多信息。

为此,我使用以下钩子:woocommerce_admin_booking_data_after_booking_details

如果我的预订与订单相关联,我会使用函数 wc_get_order_item_meta 检索我的数据

我希望能够在预订尚未成为订单时检索我的数据 (例如,只需添加到购物篮中)

在浏览数据库的时候,我看到信息存储在表woocommerce_sessions中。

在我使用的钩子中,我只能访问预订的 ID。

是否可以从这个中检索对应的会话?

谢谢

更新

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);

【问题讨论】:

    标签: php wordpress woocommerce cart woocommerce-bookings


    【解决方案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>';
    }
    

    或者

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

    此代码已经过测试并且可以工作。

    一旦找到方法、名称和数据路径,您就可以将其删除(仅用于测试和开发)...

    【讨论】:

    • 感谢您的帮助。但是我想在管理面板中显示数据,我无法访问购物车,只能访问预订 ID。
    • @Antoine 这将变得更加复杂,因为唯一的方法是从会话中获取数据......所以你必须首先获取所有购物车会话数据,然后在多个 foreach 中处理这些数据循环以获取reservetion_id,然后将所需的正确数据关联到每个reservetion_id……所有这些都在自定义函数中……您可以使用$wpdb 在SQL 查询中获取数据。但这会变得非常复杂,您将无法始终获得明确的用户。
    • 好的,我明白了。我必须通过自定义查询来检索所有购物车会话还是有本机功能?
    • @Antoine Humm... 我不认为有任何原生的东西。方式是SQL查询和时间。 但请记住,您并不总是能够获得已定义的用户。如果用户已登录,则会被定义。
    • 查看表格中的内容,这实际上会变得很复杂......未登录的用户可以将产品添加到购物车中。感谢您的时间: )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2017-05-24
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    相关资源
    最近更新 更多