首页 文章

如果在Woocommerce中应用任何优惠券代码,请删除一些支付网关

提问于
浏览
1

我开始从事小型Woocommerce项目 . 我有3个支付网关进入这家商店:Paypal,信用卡和直接银行转账 .

我想要的是:如果使用优惠券代码,我想从可用的支付网关禁用(或删除)Paypal和信用卡,并保持“直接银行转账”作为可用的支付网关选择 .

要显示如何从结帐页面查看当前状态:

image

我找到了类似的解决方案,但这是基于产品类别删除网关 .

add_filter( 'woocommerce_available_payment_gateways', 'unset_payment_gateways_by_category' );

function unset_payment_gateways_by_category( $available_gateways ) {
    global $woocommerce;

    $unset = false;
    $category_ids = array( 8, 37 );

    foreach ( $woocommerce->cart->cart_contents as $key => $values ) {
        $terms = get_the_terms( $values['product_id'], 'product_cat' );    
        foreach ( $terms as $term ) {        
            if ( in_array( $term->term_id, $category_ids ) ) {
                $unset = true;
                break;
            }
        }
    }
    if ( $unset == true ) 
        unset( $available_gateways['cheque'] );

    return $available_gateways;
}

所以我认为可以使用这个功能,但根据我的问题稍作修改 .

任何帮助表示赞赏 .

2 回答

  • 2

    干得好 :

    add_filter('woocommerce_available_payment_gateways', 'unset_gatway_by_applied_coupons');
    
    function unset_gatway_by_applied_coupons($available_gateways)
    {
    
        $coupons = WC()->cart->applied_coupons;
    
        if (!empty($coupons)) {
            unset($available_gateways['bacs']);
        }
    
        return $available_gateways;
    }
    

    我们在这里做了什么我们检查是否有任何优惠券通过 WC()->cart->applied_coupons; 应用,如果优惠券数组不为空,将返回一系列优惠券删除特定支付网关

    如果您想检查是否已应用某些优惠券并根据您的情况删除gatway,您可以使用以下内容:

    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 == 'my_coupon') { //here you can specific your coupon name
                unset($available_gateways['bacs']);
            }
    
        }
    
        return $available_gateways;
    }
    

    当然这两个功能都经过测试,你只需将它们放在你的 functions.php

  • 1

    以下代码仅在客户已应用至少一个优惠券代码时才会删除所有付款网关 except "Direct bank Transfer" (bacs):

    add_filter('woocommerce_available_payment_gateways', 'applied_coupons_hide_payment_gateways', 20, 1 );
    function applied_coupons_hide_payment_gateways( $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 != 'bacs' )
                    unset($available_gateways[$gateway_id]);
            }
        }
    
        return $available_gateways;
    }
    

    代码位于活动子主题(或活动主题)的function.php文件中 . 经过测试和工作 .

相关问题