编程方式将WC Booking添加到WooCommerce购物车失败求助
问题根因定位
你遇到的500错误和加购失败是2个核心错误直接导致的:
- 你调用的
add_cart_item_data是WC Booking提供的过滤器回调函数,并非可直接调用的全局函数,直接调用会报函数未定义错误触发500 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
相关产品推荐
相关产品推荐

