一张优惠券的例外

问题描述

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

CREATE PROCEDURE sp_EAF_HEAT_COUNT(@START_DT  DATETIME,@END_DT DATETIME)
  
AS
BEGIN

--Finding Count 
DECLARE @CNT_HEADID = (SELECT 
  SELECT Count(distinct HEAT_ID) as NUM_HEATS
  FROM [SSABDB].[L2].[EAF_HEAT] where PROCESS_UNIT = 'EAFA'
AND  START_DT > @START_DT and END_DT < @END_DT)
   
-- Inserting the Count
   INSERT INTO DASH.EAFA_HEAT_COUNT (START_DT,END_DT,FURNACE,NUM_HEATS) VALUES (@START_DT,@END_DT,'A',@CNT_HEADID)
END

但现在我需要为特定的优惠券“PAYPALMSI”做一个例外,我一直在用其他代码进行测试,它可以工作,但它们相互重叠,我如何同时使用它们?在第一个代码上为 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
    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;
}

解决方法

if( sizeof( WC()->cart->get_applied_coupons() ) > 0 ){

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

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

感谢 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;
}