如何从购物车的WC_Product_Booking获取预订起止日期?
解决WooCommerce Booking购物车中获取预订起止日期的问题
你遇到的核心问题是:WC_Product_Booking是预订产品的类型对象,它负责定义产品的预订规则(比如时长、可预订时段),而get_start_date()、get_end_date()这类方法属于实际的预订记录对象(WC_Booking类)——只有当用户完成下单生成预订后,才会创建这个对象。购物车阶段的预订日期信息,是存储在购物车项的元数据里的,不是产品对象本身的属性。
正确的获取方式如下:
- 购物车中的每个预订商品项,都会携带
booking_data元数据,里面包含用户选择的起止日期、人数等关键信息 - 直接从购物车项数组中提取该元数据即可,无需调用产品对象的方法
示例代码
假设你已经拿到了目标购物车项(比如通过遍历购物车或直接获取指定项):
// 假设$cart_item是目标购物车项数组(包含data、booking_data等键) $product = $cart_item['data']; // 先确认是预订产品类型 if ( $product instanceof WC_Product_Booking ) { // 取出购物车项中的预订元数据 $booking_meta = $cart_item['booking_data']; // 获取起止日期的时间戳 $start_ts = $booking_meta['_start_date']; $end_ts = $booking_meta['_end_date']; // 格式化为可读日期(用WooCommerce内置函数保证兼容性) $start_date = wc_format_datetime( $start_ts, 'Y-m-d H:i:s' ); $end_date = wc_format_datetime( $end_ts, 'Y-m-d H:i:s' ); // 后续可使用$start_date和$end_date做业务处理 }
补充说明
- 如果你的
$product_data是从购物车项的data键取出的,那你需要找到对应的完整购物车项数组(比如通过WC()->cart->get_cart()遍历匹配),才能拿到booking_data booking_data里还包含其他预订相关信息,比如_persons(预订人数),可根据需求提取- 当订单完成后,系统会生成
WC_Booking实例,此时就可以调用get_start_date()、get_end_date()等方法来获取日期了
内容的提问来源于stack exchange,提问作者Kasper Svanholm
相关产品推荐
相关产品推荐

