2017-04-20 127 views
2

我正在使用WooCommerce预订插件,我目前正在寻找在预订摘要(产品选项)中显示其他信息。WooCommerce预订:在创建订单前检索预订数据

要做到这一点我用下面的挂钩:woocommerce_admin_booking_data_after_booking_details

如果我的预订链接到一个订单,我使用功能wc_get_order_item_meta

找回我的数据我希望能够找回我的数据当预订还没有订单时(简单地加入购物篮)

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

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

是否有可能从这个检索相应的会话?

感谢

UPDATE

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

回答

1

您可以访问到这些数据与WC_Cart方法get_cart()get_cart_from_session()

你应该使用foreach循环这2种方式:

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文件中e(或主题)或任何插件文件。

此代码已经过测试并可正常工作。

一旦找到了方法,名称和数据路径,你可以将其删除(只是为了测试和开发)...

+0

谢谢您的帮助。但是,我想要在管理控制台中显示数据,我无法访问购物车,但只能访问预订ID。 – Antoine

+0

@Antoine这将变得更加复杂,因为唯一的方法是从会话中获取数据......因此,您必须首先获取所有购物车会话数据,然后在多个foreach循环中处理这些数据以获取“reservetion_id”然后将每个'reservetion_id'关联到你想要的正确数据......所有这些都在自定义函数中......你可以使用$ wpdb来获取SQL查询中的数据。但是这将会变得非常复杂,您将无法始终获得定义的用户。 – LoicTheAztec

+0

好吧,我明白了。我必须通过自定义查询来检索所有购物车会话或有本地功能? – Antoine