WooCommerce:如果购物车总金额 = 0,则更改支付网关

Posted

技术标签:

【中文标题】WooCommerce:如果购物车总金额 = 0,则更改支付网关【英文标题】:WooCommerce: Change payment gateway if Cart Total amount = 0 【发布时间】:2014-11-08 06:53:50 【问题描述】:

如果用户拥有产品的 100% 折扣优惠券代码,我希望用户可以免费结帐我的订阅服务。因此,如果购物车总数为零,则应该没有支付网关,用户应该可以直接注册。

我认为 WooCommerce 不允许在没有支付网关的情况下工作或者很难修改,所以如果购物车总数等于 0,我想将当前的支付网关更改为“货到付款”。稍后我会将货到付款文本更改为其他内容。

这是我的虚拟开发的链接。 使用优惠码:abcd1234 这是我用来在我的 functions.php 文件中隐藏支付网关的函数:

add_filter( 'woocommerce_available_payment_gateways', 'paypal_100' );
function paypal_100($available_gateways) 
      if ( WC()->cart->total == '0' ) 
          unset( $available_gateways);
      
return $available_gateways;

提前致谢, 亚什

【问题讨论】:

【参考方案1】:

嗯,经过 6 小时的研发,这里是解决方案。

我对 plugins\woocommerce-subscriptions\classes\class-wc-subscriptions-cart.php 做了一个小的改动,一切都按我的意愿工作。如果购物车总数等于 0,则订阅产品不需要付款方式。

代码前(第 280 行):

public static function cart_needs_payment( $needs_payment, $cart ) 

    if ( self::cart_contains_subscription() ) 

        $is_for_one_period = ( self::get_cart_subscription_length() > 0 && self::get_cart_subscription_length() == self::get_cart_subscription_interval() ) ? true : false;

        if ( $cart->total == 0 && false === $needs_payment && $cart->recurring_total > 0 && false === $is_for_one_period && 'yes' !== get_option( WC_Subscriptions_Admin::$option_prefix . '_turn_off_automatic_payments', 'no' ) ) 
            $needs_payment = true;
        
    

代码后:

public static function cart_needs_payment( $needs_payment, $cart ) 

    if ( self::cart_contains_subscription() ) 

        $is_for_one_period = ( self::get_cart_subscription_length() > 0 && self::get_cart_subscription_length() == self::get_cart_subscription_interval() ) ? true : false;

        if ( $cart->total == 0 && false === $needs_payment && $cart->recurring_total > 0 && false === $is_for_one_period && 'yes' !== get_option( WC_Subscriptions_Admin::$option_prefix . '_turn_off_automatic_payments', 'no' ) ) 
            $needs_payment = false;
        
    

我刚刚更改了“$needs_payment = true;”到“$needs_payment = false;”

【讨论】:

【参考方案2】:

你可以使用下面的代码sn-p。 所以我们检查特定的支付方式是否可用,并检查购物车中的总金额是否等于某个金额。然后我们可以隐藏该付款方式。在您的情况下,您可以隐藏所有可用的方法。

function payment_gateway_disable_total_amount( $available_gateways ) 
global $woocommerce;
if ( isset( $available_gateways['paypal'] ) && $woocommerce->cart->total == 0 ) 
    unset(  $available_gateways['paypal'] );

    return $available_gateways;

add_filter( 'woocommerce_available_payment_gateways', 'payment_gateway_disable_total_amount' );

【讨论】:

以上是关于WooCommerce:如果购物车总金额 = 0,则更改支付网关的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce:根据选择的支付网关向卡添加费用

在 WooCommerce 购物车中设置全球最低金额,类别餐饮 + 子类别除外

WooCommerce 中特定运输类别、最低金额和地理定位国家/地区的购物车消息

10413 贝宝错误:购物车项目总金额与订单金额不匹配

使用 woocommerce 在 wordpress 中获取购物车中的商品数量

woocommerce_coupon_get_discount_amount 的折扣金额不正确