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 中特定运输类别、最低金额和地理定位国家/地区的购物车消息