【问题标题】:WooCommerce: Change payment gateway if Cart Total amount = 0WooCommerce:如果购物车总金额 = 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;
}

提前致谢, 亚什

【问题讨论】:

    标签: paypal wordpress woocommerce


    【解决方案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' );
      

      【讨论】:

        猜你喜欢
        • 2018-07-25
        • 1970-01-01
        • 2019-01-21
        • 1970-01-01
        • 1970-01-01
        • 2020-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多