【问题标题】:Making an exception for one coupon一张优惠券例外
【发布时间】:2021-10-02 21:47:38
【问题描述】:

当任何用户使用优惠券时,我正在使用此代码禁用 Paypal:

add_filter('woocommerce_available_payment_gateways', 'applied_coupons_hide_payment_gateways', 20, 1 );
function applied_coupons_hide_payment_gateways( $available_gateways){
    // Not in backend (admin)
    if( is_admin() ) 
        return $available_gateways;

    // If at least a coupon is applied
    if( sizeof( WC()->cart->get_applied_coupons() ) > 0 ){
        // Loop through payment gateways
        foreach ( $available_gateways as $gateway_id => $gateway ) {
            // Remove all payment gateways except BACS (Bank Wire)
            if( $gateway_id != 'stripe' )
            if( $gateway_id != 'bacs' )
                unset($available_gateways[$gateway_id]);
        }
    }

    return $available_gateways;
}

但是现在我需要为特定的优惠券“PAYPALMSI”创建一个例外,我一直在使用其他代码进行测试,它可以工作,但它们相互覆盖,我如何同时使用它们?在第一个代码上为 paypalmsi 做一个例外?

add_filter('woocommerce_available_payment_gateways', 'unset_gatway_by_applied_coupons');

function unset_gatway_by_applied_coupons($available_gateways)
{

    $coupons = WC()->cart->applied_coupons;

    foreach ($coupons as $coupon) {

        if ($coupon == 'paypalmsi') { 
        
            unset($available_gateways['stripe']);
           unset($available_gateways['bacs']);
        }

    }

    return $available_gateways;
}

【问题讨论】:

    标签: woocommerce paypal code-snippets coupon


    【解决方案1】:
    if( sizeof( WC()->cart->get_applied_coupons() ) > 0 ){
    

    更改该行以同时检查 paypalmsi 是否是优惠券之一...

    $coupons = WC()->cart->get_applied_coupons();
    if( sizeof( $coupons ) > 0 && !in_array( 'paypalmsi', $coupons )){
    

    【讨论】:

    • 嗨普雷斯顿,感谢您的回答,看起来它应该可以工作,但我收到此错误:语法错误,意外的“foreach”(T_FOREACH)
    • 加括号
    【解决方案2】:

    感谢 PrestonPHX

    如果使用优惠券,我使用此代码仅显示条纹和 bacs,不包括特定的“paypalmsi”

    add_filter('woocommerce_available_payment_gateways', 'applied_coupons_hide_payment_gateways', 20, 1 );
    function applied_coupons_hide_payment_gateways( $available_gateways){
        // Not in backend (admin)
        if( is_admin() ) 
            return $available_gateways;
    
        // If at least a coupon is applied
      $coupons = WC()->cart->get_applied_coupons();
    if( sizeof( $coupons ) > 0 && !in_array( 'paypalmsi', $coupons )){
          
            // Loop through payment gateways
            foreach ( $available_gateways as $gateway_id => $gateway ) {
                // Remove all payment gateways except BACS (Bank Wire)
                if( $gateway_id != 'stripe' )
                if( $gateway_id != 'bacs' )
                    unset($available_gateways[$gateway_id]);
            }
        }
    
        return $available_gateways;
    }

    然后我使用此代码在使用优惠券“paypalmsi”时仅显示贝宝。

    add_filter('woocommerce_available_payment_gateways', 'unset_gatway_by_applied_coupons');
    
    function unset_gatway_by_applied_coupons($available_gateways)
    {
    
        $coupons = WC()->cart->applied_coupons;
    
        foreach ($coupons as $coupon) {
    
            if ($coupon == 'paypalmsi') { 
            
                unset($available_gateways['stripe']);
               unset($available_gateways['bacs']);
            }
    
        }
    
        return $available_gateways;
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-09
      • 1970-01-01
      • 2019-04-13
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      相关资源
      最近更新 更多