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

时间:2018-08-31 17:13:36

标签: php wordpress woocommerce payment-gateway coupon

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

我想要的是:如果使用优惠券代码,我想从可用的支付网关中禁用(或删除)贝宝和信用卡,而只需将“直接银行转帐”作为可用的支付网关选择即可。

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

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 个答案:

答案 0 :(得分:3)

仅当客户已应用至少一个优惠券代码时,以下代码才会删除除“直接银行转帐” ( )以外的所有付款网关:

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文件中。经过测试,可以正常工作。

答案 1 :(得分:1)

您去的地方:

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;应用了任何优惠券,如果优惠券阵列不为空,则会返回优惠券阵列

如果您要检查是否应用了某些优惠券并根据您的情况删除盖特威,可以使用以下方法:

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