我正在使用Woomerce Bookings插件,我目前正在寻找在预订摘要(产品选项)中显示附加信息。
为此,我使用以下钩子: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);
最佳答案
您可以使用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文件或任何插件文件中。
这段代码已经过测试并且可以工作。
找到方法、名称和数据路径后,可以将其删除(仅用于测试和开发)。
关于php - WooCommerce预订:在创建订单之前检索预订数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43523812/