wordpress 在Woocommerce中添加或删除基于购物车总额的支付网关

bvn4nwqk  于 2023-10-16  发布在  WordPress
关注(0)|答案(2)|浏览(137)

我有一个插件,当authorize.net用作支付网关时会增加费用。
然而,当我使用一张涵盖整个购买的礼品卡并将购物车总额降至0美元时,订单仍然设置为authorize.net,并且当客户在技术上不支付任何费用时,会收取费用。
我正在使用以下代码禁用authorize.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' );

功能不可靠。要么信用卡费用根本不显示,要么需要第二次刷新才能根据我在购物车中的操作显示或消失。
问题可能不仅仅是自动计算和函数本身。可能有一种方法可以将其放入一个函数中,而不是上面的两个函数,但我还没有成功

pu3pd22g

pu3pd22g1#

你的两个功能可以合并如下,你不是针对零车总量。
所以你应该试试这个:

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文件中。*

未经测试,但它应该工作。

zbdgwd5y

zbdgwd5y2#

不知道这是否对任何人有帮助,但我需要为eWay做一个信用卡授权,让你得到一个经常性的支付令牌。但是,如果您的购物车余额为零,Woocommmerce不会显示信用卡表单。
检查includes/wc-template-functions.php的源代码,我发现woocommerce_checkout_payment函数应用了一个过滤器来查看是否需要付款。由于这个过滤器从来没有被添加,只是被应用,我想我们可以添加它,它将获得优先级。

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

有了这个地方,它总是显示信用卡的形式,即使是零余额。当然,你可以在过滤器中加入更多的逻辑来决定返回true还是false。
希望这对某人有帮助,这是对我的。

相关问题