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

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

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

  1. function authorize_less($available_gateways) {
  2. $maximum = 0;
  3. if ( WC()->cart->total < $maximum ) {
  4. unset( $available_gateways['authorizenet'] );
  5. }
  6. return $available_gateways;
  7. }
  8. add_filter( 'woocommerce_available_payment_gateways', 'authorize_less' );
  9. function authorize_more($available_gateways) {
  10. $maximum = 0;
  11. if ( WC()->cart->total > $maximum ) {
  12. unset( $available_gateways['cod'] );
  13. }
  14. return $available_gateways;
  15. }
  16. add_filter( 'woocommerce_available_payment_gateways', 'authorize_more' );

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

pu3pd22g

pu3pd22g1#

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

  1. add_filter( 'woocommerce_available_payment_gateways', 'conditional_available_payment_gateways' 20, 1 );
  2. function conditional_available_payment_gateways( $available_gateways ) {
  3. if( is_admin() ) return $available_gateways; // Only for frontend
  4. $amount_threshold = 0;
  5. if ( WC()->cart->total <= $amount_threshold ) {
  6. unset( $available_gateways['authorizenet'] );
  7. } else {
  8. unset( $available_gateways['cod'] );
  9. }
  10. return $available_gateways;
  11. }
  • 代码放在您的活动子主题(活动主题)的functions.php文件中。*

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

展开查看全部
zbdgwd5y

zbdgwd5y2#

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

  1. add_filter( 'woocommerce_cart_needs_payment', function(){
  2. return true;
  3. }, 99 );

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

相关问题