我有一个插件,当 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' );
该功能无法正常工作。根据我在购物车中的操作,信用卡费用根本不显示或需要第二次刷新才能显示或消失。
问题可能不仅仅是自动计算和功能本身。可能有一种方法可以把它放在一个函数而不是我上面的两个函数中,但我没有成功用它
答案 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。
希望这对某人有用,对我有用。