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

WooCommerce Subscriptions代码修复:取消订阅76时同步取消其他订阅

WooCommerce 订阅联动取消修复方案

原代码的核心问题是硬编码固定订阅ID,只能处理特定的两个订阅,不符合“取消用户所有其他订阅”的需求,同时调用的取消方法也不够规范。以下是修复后的代码:

add_action('woocommerce_subscription_status_updated', 'custom_cancel_user_other_subscriptions', 10, 3);

function custom_cancel_user_other_subscriptions($subscription_id, $new_status, $old_status) {
    // 仅当订阅从非取消状态变为"已取消"时执行
    if ($new_status !== 'cancelled' || $old_status === 'cancelled') {
        return;
    }

    // 获取当前订阅对象
    $current_subscription = wcs_get_subscription($subscription_id);
    if (!$current_subscription) {
        return;
    }

    // 获取订阅所属用户ID
    $user_id = $current_subscription->get_user_id();
    if (!$user_id) {
        return;
    }

    // 查询该用户的所有有效订阅(活跃/暂停状态)
    $user_subscriptions = wcs_get_subscriptions(array(
        'user_id' => $user_id,
        'post_status' => array('wc-active', 'wc-on-hold')
    ));

    // 遍历取消除当前订阅外的所有订阅
    foreach ($user_subscriptions as $subscription) {
        if ($subscription->get_id() !== $subscription_id) {
            // 更新状态为已取消并添加操作备注
            $subscription->update_status('cancelled', '联动取消:用户主动取消了其他订阅');
        }
    }
}

修复说明:

  • 移除硬编码ID限制,改为基于用户ID批量处理,适配所有用户的订阅场景
  • 增加状态校验:避免重复触发取消逻辑,仅在订阅状态从有效变为取消时执行
  • 使用WooCommerce官方查询函数获取用户订阅,确保兼容性
  • 采用官方推荐的update_status()方法修改订阅状态,并添加操作备注,便于后台追溯
  • 增加多层有效性判断,提升代码稳定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:52:45