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

问题描述 投票:0回答:2

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

但是,当我使用涵盖整个购买的礼品卡并将购物车总额降至 0 美元时,订单仍设置为authorize.net,并且当客户实际上没有支付任何费用时会产生费用。

当购物车总额低于 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' );

该功能运行不可靠。信用卡费用要么根本不显示,要么需要根据我在购物车中的操作进行第二次刷新才能显示或消失。

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

php wordpress woocommerce payment-gateway cart
2个回答
4
投票

您的两个功能可以按如下方式合并,并且您的目标不是零购物车总金额。

所以你应该尝试这个:

add_filter( 'woocommerce_available_payment_gateways', 'conditional_available_payment_gateways' 20, 1 );
function conditional_available_payment_gateways( $available_gateways ) {
if( is_admin() ) return $available_gateways; // Only for frontend
    $amount_threshold = 0;

    if ( WC()->cart->total <= $amount_threshold ) {
        unset( $available_gateways['authorizenet'] );
    } else {
        unset( $available_gateways['cod'] );
    }
    return $available_gateways;
}

代码位于活动子主题(活动主题)的functions.php文件中。

未经测试,但应该可以工作。


0
投票

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

查看

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

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

有了这个,它总是显示信用卡表格,即使余额为零。当然,您可以在过滤器中添加更多逻辑来决定返回 true 或 false。

希望这对某人有帮助,对我来说也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.