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

时间:2014-09-14 17:59:45

标签: paypal wordpress-plugin woocommerce wordpress

如果用户拥有该产品的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;
}

提前致谢, 佳日

2 个答案:

答案 0 :(得分:2)

好吧,经过6个小时的R& D这是解决方案。

我对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;
        }
    }

我刚改变了#34; $ needs_payment = true;" to" $ needs_payment = false;"

答案 1 :(得分:0)

您可以使用以下代码段。 因此,我们检查特定付款方式是否可用,并检查购物车中的总金额是否等于某个金额。然后我们可以隐藏这种付款方式。在您的情况下,您可以隐藏所有可用的方法。

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' );