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

编程方式将WC Booking添加到WooCommerce购物车失败求助

问题根因定位

你遇到的500错误和加购失败是2个核心错误直接导致的:

  1. 你调用的add_cart_item_data是WC Booking提供的过滤器回调函数,并非可直接调用的全局函数,直接调用会报函数未定义错误触发500
  2. WC_Booking类不存在add_cart_item公共方法,且你代码里变量名$ new_booking_object多了空格存在语法错误,直接调用必然触发500

你提前创建好in-cart状态的预订记录后,不需要手动构造全量的$cart_item_meta,直接调用WooCommerce核心购物车方法绑定已有预订ID即可完成加购,实现代码如下:

// 初始化购物车(避免非前端场景下购物车对象未加载)
if ( is_null( WC()->cart ) ) {
    wc_load_cart();
}

// 仅需传入必要的绑定参数,无需冗余重复字段
$cart_item_data = [
    '_booking_id' => $new_booking->get_id(), // 绑定你已经创建好的预订ID
    'cost' => $price,
    'resource_id' => $resourceId,
    'person_counts' => [ $addPaxId => $pax ]
];

// 调用WooCommerce核心加购方法,参数依次为:产品ID、购买数量、变体ID(无则填0)、变体属性(无则空数组)、自定义购物车数据
$cart_item_key = WC()->cart->add_to_cart( $prodId, 1, 0, [], $cart_item_data );

// 持久化购物车会话,避免刷新后数据丢失
WC()->cart->set_session();

// 加购结果校验
if ( $cart_item_key ) {
    // 加购成功逻辑
} else {
    // 加购失败逻辑
}

额外注意事项

  • 你构造的$cart_item_meta里重复的start/start_date、persons/person_counts等字段不需要冗余传入,WC Booking会自动从你绑定的预订对象里读取对应数据,重复传值反而可能导致字段覆盖异常
  • 如果不需要提前创建预订记录,可以不用调用$new_booking->create()方法,直接把预订的起止时间、人数、时区等参数放到$cart_item_data里,WC Booking的内置钩子会自动生成对应in-cart状态的预订记录
  • 出现500错误时优先开启WordPress的WP_DEBUG模式查看错误日志,可以快速定位函数不存在、语法错误等低级问题,不需要盲目对比数据库字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:06:03