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

自定义订单状态变更时同步更新WooCommerce预订状态问题

解决WooCommerce自定义支付状态与预订状态同步问题

我来帮你梳理下这个问题:其实完全可以不用额外代码实现同步,核心是你在创建自定义订单状态时的配置没到位,WooCommerce Bookings插件本身就和订单状态有默认的关联逻辑。

不用代码的解决步骤

  • 打开WooCommerce后台的「Order Status Manager」设置页面,找到你创建的那个自定义已支付状态(也就是你代码里的pool-payment-rec)。
  • 在这个状态的配置项里,找到**「Order Status Type」(订单状态类型)的选项,把它设置为「Paid」(已支付)类型**。WooCommerce Bookings会自动识别所有标记为“已支付”类型的订单状态,同步将关联的预订状态更新为paid。
  • 保存设置后,触发一次这个自定义订单状态的变更,就能看到预订状态自动同步了。

关于你之前的代码错误

你给出的代码片段没写完,但从开头看大概率是函数名拼写不全(auto_chan...应该是auto_change_booking_status_to_paid),或者没有正确调用WooCommerce Bookings的预订操作函数,才导致了致命错误。如果上面的配置方法不生效,你可以试试下面的完整代码(注意要放到主题的functions.php里,或者用代码片段插件添加):

add_action('woocommerce_order_status_pool-payment-rec', 'auto_change_booking_status_to_paid', 10, 1);
function auto_change_booking_status_to_paid($order_id) {
    // 获取订单对象
    $order = wc_get_order($order_id);
    if (!$order) return;

    // 遍历订单内的所有预订项目
    foreach ($order->get_items('booking') as $booking_item) {
        $booking_id = $booking_item->get_meta('_booking_id');
        $booking = get_wc_booking($booking_id);
        if ($booking) {
            // 将预订状态更新为paid
            $booking->update_status('paid');
        }
    }
}

不过还是优先推荐用插件配置的方式,既简单又能避免代码出错的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:28:41