根据Woocommerce中的购物车总金额添加或删除付款网关

时间:2018-02-15 04:56:37

标签: php wordpress woocommerce payment-gateway cart

我有一个插件,当 authorize.net 用作支付网关时会增加费用。

然而,当我使用涵盖整个购买的礼品卡并将购物车总数降至0美元时,订单仍然设置为authorize.net,并且当客户在技术上不支付任何费用时会收取费用。 / p>

当购物车总额小于0美元时,我正在使用以下代码禁用authorize.net支付网关:

function authorize_less($available_gateways) {
    $maximum = 0;
    if ( WC()->cart->total < $maximum ) {
    unset( $available_gateways['authorizenet'] );
    }
    return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'authorize_less' );



function authorize_more($available_gateways) {
    $maximum = 0;
    if ( WC()->cart->total > $maximum ) {
    unset( $available_gateways['cod'] );
    }
    return $available_gateways;
}
add_filter( 'woocommerce_available_payment_gateways', 'authorize_more' );

该功能无法正常工作。根据我在购物车中的操作,信用卡费用根本不显示或需要第二次刷新才能显示或消失。

问题可能不仅仅是自动计算和功能本身。可能有一种方法可以把它放在一个函数而不是我上面的两个函数中,但我没有成功用它

2 个答案:

答案 0 :(得分:2)

您的这两项功能可以合并如下,但您并未定位零购物车总金额。

所以你应该试试这个:

add_filter( 'woocommerce_available_payment_gateways', 'conditional_available_payment_gateways' 20, 1 );
function conditional_available_payment_gateways( $available_gateways ) {
    if ( WC()->cart->total =< 0 ) {
        unset( $available_gateways['authorizenet'] );
    } else {
        unset( $available_gateways['cod'] );
    }
    return $available_gateways;
}

代码进入活动子主题(活动主题)的function.php文件。

未经测试,但可行。

答案 1 :(得分:0)

不确定这是否对任何人都有帮助,但是我需要对eWay进行信用卡授权,以使您可以获取定期付款令牌。 但是,如果您的购物车余额为零,则Woocommmerce不会显示信用卡表格。

检查includes/wc-template-functions.php的来源,我发现函数woocommerce_checkout_payment应用了一个过滤器来查看是否需要付款。 由于此过滤器从未添加,而是仅应用了,我想我们可以添加它,它将获得优先级。

add_filter( 'woocommerce_cart_needs_payment', function(){
    return true;
  }, 99 );

有了此选项,即使余额为零,它也始终显示信用卡表格。您当然可以在过滤器中添加更多逻辑,以决定返回true或false。

希望这对某人有用,对我有用。