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

WooCommerce特定优惠券互斥设置:仅禁止A与B同时使用

WooCommerce 特定优惠券组合互斥限制实现方案

要实现仅让优惠券A和B互斥、其余优惠券仍可叠加2张的需求,直接通过WooCommerce的钩子写自定义代码就能搞定,不需要依赖额外插件。核心思路是在优惠券应用/验证阶段,检查购物车中是否存在冲突的目标优惠券,若存在则阻止当前优惠券生效或移除已存在的冲突优惠券。

具体代码实现

将以下代码添加到你的主题functions.php文件,或自定义插件的PHP文件中:

// 定义互斥的优惠券组合(替换成你的优惠券slug或ID)
function get_mutually_exclusive_coupons() {
    return array(
        'coupon-a' => array('coupon-b'), // 优惠券A不能和优惠券B共存
        'coupon-b' => array('coupon-a')  // 优惠券B不能和优惠券A共存
    );
}

// 当优惠券被应用时,检查并移除冲突的优惠券
add_action('woocommerce_applied_coupon', 'check_and_remove_conflicting_coupons');
function check_and_remove_conflicting_coupons($applied_coupon) {
    $mutual_coupons = get_mutually_exclusive_coupons();
    // 如果当前应用的优惠券在互斥列表中
    if (isset($mutual_coupons[$applied_coupon])) {
        $cart = WC()->cart;
        $conflicting_coupons = $mutual_coupons[$applied_coupon];
        
        // 遍历购物车已应用的优惠券,移除冲突的
        foreach ($cart->get_applied_coupons() as $coupon) {
            if (in_array($coupon, $conflicting_coupons)) {
                $cart->remove_coupon($coupon);
                wc_add_notice(sprintf('优惠券 %s 与已应用的优惠券 %s 无法同时使用', wc_get_coupon_code_by_id($applied_coupon), wc_get_coupon_code_by_id($coupon)), 'error');
            }
        }
    }
}

// 在优惠券验证阶段,阻止冲突优惠券被应用
add_filter('woocommerce_coupon_is_valid', 'prevent_conflicting_coupon_application', 10, 3);
function prevent_conflicting_coupon_application($is_valid, $coupon, $discount) {
    $mutual_coupons = get_mutually_exclusive_coupons();
    $coupon_code = $coupon->get_code();
    
    // 如果当前验证的优惠券在互斥列表中
    if (isset($mutual_coupons[$coupon_code])) {
        $cart = WC()->cart;
        $conflicting_coupons = $mutual_coupons[$coupon_code];
        
        // 检查购物车是否已有冲突优惠券
        foreach ($cart->get_applied_coupons() as $applied_coupon) {
            if (in_array($applied_coupon, $conflicting_coupons)) {
                $is_valid = false;
                wc_add_notice(sprintf('优惠券 %s 与已应用的优惠券 %s 无法同时使用', $coupon_code, $applied_coupon), 'error');
                break;
            }
        }
    }
    
    return $is_valid;
}

配置说明

  1. 替换优惠券标识:在get_mutually_exclusive_coupons函数中,把coupon-a和coupon-b替换成你实际的优惠券slug(或ID),如果需要添加更多互斥组合,直接按现有格式扩展数组即可。
  2. 后台设置:确保WooCommerce后台的「优惠券」设置中,开启了「允许使用多个优惠券」选项,并且不要将优惠券A或B设置为「不可与其他优惠券叠加」——我们的自定义代码会单独处理这对组合的互斥逻辑。
  3. 错误提示:代码中已经包含友好的错误提示,用户尝试叠加冲突优惠券时会收到明确的提示信息。

这样设置后,除了A和B不能同时使用外,其他任意两张优惠券都可以正常叠加生效。

内容的提问来源于stack exchange,提问作者pelle by shelly gafni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:45:45