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

WooCommerce Subscriptions手动循环订单自动修改为processing状态时触发错误的解决求助

问题分析与解决方案

错误原因解析

你遇到的Call to a member function get_total() on bool错误,核心问题出在两个关键点:

  1. 钩子参数不匹配:wcs_renewal_order_created钩子的实际参数是$renewal_order(订单对象)和$subscription(订阅对象),但你的函数只接收了$order_id,这会导致后续订单对象获取异常,干扰Subscriptions插件的内部流程。
  2. 状态修改时机过早:在wcs_renewal_order_created钩子中直接修改订单状态,会打断Subscriptions插件对续费订单的后续逻辑处理,导致插件内部的$renewal_order变量被错误设为false,进而触发调用get_total()的错误。

修复后的代码方案

先修正钩子参数匹配问题,同时调整状态修改逻辑,确保不干扰Subscriptions的内部流程:

add_action('wcs_renewal_order_created', 'sab_auto_complete_renewals_by_payment_method', 20, 2); 
function sab_auto_complete_renewals_by_payment_method($renewal_order, $subscription) { 
    // 跳过0金额订单(Subscriptions会自动处理这类订单)
    if ( 0 == $renewal_order->get_total() ) {
        return;
    }

    // 仅处理非bacs支付的待支付订单
    if ( $renewal_order->get_status() === 'pending' && $renewal_order->get_payment_method() !== 'bacs' ) { 
        // 使用安全方式更新订单状态并添加备注
        $renewal_order->update_status( 'processing', 'Automatically set to processing to keep subscription active', true );
        // 确保订阅保持活跃状态
        $subscription->update_status( 'active', 'Subscription kept active due to auto-processing renewal order' );
    } 
}

替代方案:直接强制保持订阅活跃

如果你的核心需求是无论续费订单状态如何,都让订阅保持Active,可以直接针对订阅状态操作,跳过订单状态修改逻辑,使用更精准的钩子:

add_action('wcs_renewal_order_created', 'sab_force_subscription_active_after_renewal', 20, 2);
function sab_force_subscription_active_after_renewal($renewal_order, $subscription) {
    // 强制将订阅设置为Active状态,忽略订单状态
    if ( $subscription->get_status() !== 'active' ) {
        $subscription->update_status( 'active', 'Forced to active regardless of renewal order status' );
    }
}

关键说明

  • 调整钩子优先级为20,确保在Subscriptions插件默认逻辑之后执行,避免干扰内部流程。
  • 使用$renewal_order->get_status()替代直接访问$order->data['status'],符合WooCommerce最佳实践(避免直接操作私有数据)。
  • 添加订单和订阅状态备注,方便后续排查问题。

额外排查建议

  1. 检查是否有其他插件或自定义代码也在修改续费订单/订阅状态,可能存在冲突。
  2. 确保WooCommerce和Subscriptions插件版本为最新,旧版本可能存在已知的钩子逻辑问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:07:32