You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从购物车的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做业务处理
}

补充说明

  1. 如果你的$product_data是从购物车项的data键取出的,那你需要找到对应的完整购物车项数组(比如通过WC()->cart->get_cart()遍历匹配),才能拿到booking_data
  2. booking_data里还包含其他预订相关信息,比如_persons(预订人数),可根据需求提取
  3. 当订单完成后,系统会生成WC_Booking实例,此时就可以调用get_start_date()、get_end_date()等方法来获取日期了

内容的提问来源于stack exchange,提问作者Kasper Svanholm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:22:10