You need to enable JavaScript to run this app. WooCommerce 为指定优惠券PAYPALMSI设置支付网关例外的实现方法
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce 为指定优惠券PAYPALMSI设置支付网关例外的实现方法

解决方案

两段代码冲突的原因是它们都挂载了同一个woocommerce_available_payment_gateways过滤器,回调函数会按优先级先后修改可用支付方式列表,后执行的逻辑会覆盖前者的修改结果。你可以直接把两段逻辑合并到同一个过滤器函数中即可解决问题,合并后的完整代码如下:

add_filter('woocommerce_available_payment_gateways', 'applied_coupons_hide_payment_gateways', 20, 1 );
function applied_coupons_hide_payment_gateways( $available_gateways){
    // 后台环境不执行逻辑
    if( is_admin() ) 
        return $available_gateways;

    $applied_coupons = WC()->cart->get_applied_coupons();
    $has_paypalmsi = in_array('paypalmsi', $applied_coupons);

    // 存在特殊优惠券PAYPALMSI的情况
    if ($has_paypalmsi) {
        // 移除stripe和bacs,仅保留PayPal可用
        unset($available_gateways['stripe']);
        unset($available_gateways['bacs']);
        return $available_gateways;
    }

    // 存在其他优惠券的情况
    if( sizeof( $applied_coupons ) > 0 ){
        // 仅保留stripe和bacs,移除其他支付方式(含PayPal)
        foreach ( $available_gateways as $gateway_id => $gateway ) {
            if( $gateway_id != 'stripe' && $gateway_id != 'bacs' ) {
                unset($available_gateways[$gateway_id]);
            }
        }
    }

    return $available_gateways;
}

逻辑说明

  • 新增特殊优惠券优先级校验,先判断是否使用了paypalmsi,命中后直接执行特殊规则返回结果,不走通用优惠券逻辑
  • 把原代码中两层独立的if判断合并为&&逻辑,减少代码冗余,执行效果和原逻辑完全一致
  • 废弃原来的第二个过滤器函数,所有规则都在同一个钩子回调中处理,不会再出现逻辑覆盖的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:06:00