根据购物车总额在WooCommerce中添加或删除付款网关



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

但是,当我使用一张涵盖全部购买的礼品卡并将购物车总计降至0美元时,该订单仍设置为授权。/p>

我正在使用以下代码禁用授权。NET付款网关,当时购物车总量小于$ 0:

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' );

该功能无法可靠地工作。信用卡费用根本不出现,或者需要第二次刷新才能根据我在购物车中的工作出现或消失。

问题可能比自动计算和功能本身更多。可能有一种方法可以将其放入一个函数,而不是上面的两个函数,但是我没有成功

您的两个功能都可以按以下方式合并,并且您没有针对零购物车总额。

因此,您应该尝试以下操作:

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
    if ( WC()->cart->total <= 0 ) {
        unset( $available_gateways['authorizenet'] );
    } else {
        unset( $available_gateways['cod'] );
    }
    return $available_gateways;
}

代码插入活动子主题的functions.php文件(活动主题(。

未经测试,但可以起作用。

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

检查includes/wc-template-functions.php的源,我发现该功能woocommerce_checkout_payment应用了过滤器以查看是否需要付款。由于此过滤器永远不会添加,但仅应用了,我想我们可以添加它,并且将获得优先级。

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

将其实现始终显示信用卡表格,即使是为零的余额。您当然可以在过滤器中放置更多的逻辑来决定返回True或False。

希望这对某人有帮助,对我有帮助。

最新更新