根据 Woocommerce 中的购物车总金额添加或删除支付网关
Posted
技术标签:
【中文标题】根据 Woocommerce 中的购物车总金额添加或删除支付网关【英文标题】:add or remove payment gateways based on cart total amount in Woocommerce 【发布时间】:2018-07-25 19:01:45 【问题描述】:我有一个插件,当 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' );
该功能无法可靠运行。根据我在购物车中的操作,信用卡费用根本不显示,或者需要第二次刷新才能出现或消失。
问题可能不仅仅是自动计算和函数本身。可能有一种方法可以将它放入一个函数而不是我上面的两个函数中,但我没有成功
【问题讨论】:
【参考方案1】:您的两个功能可以按如下方式合并,并且您的目标不是零购物车总金额。
所以你应该试试这个:
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 文件中。
未经测试,但它可以工作。
【讨论】:
谢谢,这段代码肯定更紧凑。我仍然遇到需要完全刷新页面才能在计算中显示条件的问题,这现在是 AJAX 问题吗? @mnguyen 我可以用另一个网关替换“authorizenet”,但在我这边进行测试时,问题是“使用礼品卡”:该礼品卡是优惠券之类的还是什么?女佣怎么打折的?我认为问题就在那里。您最好在时间线中逐步解释该过程...您也可以尝试使用WC()->cart->get_cart_contents_total( )
看看会发生什么...
我使用的是固定购物车金额,例如礼品卡,该金额可能超过购物车总数。但由于问题在于前端显示基于此规则的新计算,如果不是摆脱支付网关,而是根据条件简单地更改它怎么办?我注意到选择单选按钮确实会更新计算。试过了,但没用:***.com/questions/37814998/… 也看到了更改 js 文件的建议,但感觉最好通过 php 完成
@mnguyen 是的,因为它是 ajax 驱动的……当你选择一个复选框时,它会执行这个 JS $('body').trigger('update_checkout');
,因为很多 JS 事件都委托给了 body……我不明白的是你是如何设置的这个固定的购物车数量,例如前端的时间和地点(哪个挂钩以及该礼物的相关代码在哪里)......没有这些细节和代码,我只会比你更卡。【参考方案2】:
不确定这是否对任何人有帮助,但我需要为 eWay 进行信用卡授权,以便您获得定期付款令牌。 但是,如果您的购物车余额为零,Woocommmerce 不会显示信用卡表格。
查看includes/wc-template-functions.php
的来源,我发现woocommerce_checkout_payment
函数应用了一个过滤器来查看是否需要付款。
由于这个过滤器从未添加,只是应用了,我想我们可以添加它,它将获得优先权。
add_filter( 'woocommerce_cart_needs_payment', function()
return true;
, 99 );
有了这个,它总是显示信用卡表格,即使是零余额。你当然可以在过滤器中加入更多的逻辑来决定返回真还是假。
希望这对某人有帮助,对我来说。
【讨论】:
以上是关于根据 Woocommerce 中的购物车总金额添加或删除支付网关的主要内容,如果未能解决你的问题,请参考以下文章
WooCommerce:如果购物车总金额 = 0,则更改支付网关
在 WooCommerce 购物车中设置全球最低金额,类别餐饮 + 子类别除外
使用 woocommerce 在 wordpress 中获取购物车中的商品数量