根据 WooCommerce 中的购物车小计隐藏特定运输方式

问题描述 投票:0回答:1

当购物车小计超过 50 英镑时,我尝试仅显示 1 种运输方式。

网站已经有很多插件了,所以我不想再添加了。

非常欢迎任何帮助。

苏菲

首先 - 我的代码基于此线程

`// if free shipping is available, disable a specific shipping rate add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_rate_if_shipping_free_is_available', 10, 2 ); function hide_specific_shipping_rate_if_shipping_free_is_available( $rates, $package ) { if ( isset( $rates['free_shipping:2'] ) ) { unset( $rates['flat_rate:20'] ); } return $rates; }`


我将其改编为:

// if order is over £50, disable a specific shipping rate add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_rate_if_shipping_free_is_available', 10, 2 ); function hide_specific_shipping_rate_if_shipping_free_is_available( $rates, $order_total ) { if ( $order_total > 50 ) { unset( $rates['flat_rate:1'] ); unset( $rates['flat_rate:9'] ); unset( $rates['free_shipping:2'] ); } return $rates; }


这有效,但现在当购物车低于 50 时它不会回来(我每次都清除 WC 瞬变,也尝试过清除页面和浏览器缓存)

所以我尝试了这个:

`// if order is over £50, disable a specific shipping rate add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_rate_if_shipping_free_is_available', 10, 2 ); function hide_specific_shipping_rate_if_shipping_free_is_available( $rates, $order_total ) { if ( $order_total > 50 ) { unset( $rates['flat_rate:1'] ); unset( $rates['flat_rate:9'] ); unset( $rates['free_shipping:2'] ); } else { isset( $rates['flat_rate:1'] ); isset( $rates['flat_rate:9'] ); isset( $rates['free_shipping:2'] ); } return $rates; }`


我尝试的另一个选择是:

`` // if order is over £50, disable a specific shipping rate add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_rate_if_shipping_free_is_available', 10, 2 ); function hide_specific_shipping_rate_if_shipping_free_is_available( $rates, $package ) { if ( $order_total > 50 ) { if ( isset( $rates['flat_rate:7'] ) ) { unset( $rates['flat_rate:1'] ); unset( $rates['flat_rate:9'] ); unset( $rates['free_shipping:2'] ); } } return $rates; } ``
我也阅读并尝试过其他相关线程,但它们要么对我来说太不同,无法适应我有限的 PHP 知识,要么它们会导致functions.php 中出现错误


更新

我一直在做一些更多的测试,似乎第一次就可以工作,但是当购物车更新时它不会改变 - 所以这是我认为需要支持的部分。

这段代码是发生这种情况的完美示例:

// if order is over £50, disable a specific shipping rate add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_rate_if_shipping_free_is_available', 10, 2 ); function hide_specific_shipping_rate_if_shipping_free_is_available( $rates, $order_total ) { if ( isset( $rates['flat_rate:2'] ) && $order_total > 50) { unset( $rates['flat_rate:1'] ); unset( $rates['flat_rate:3'] ); } return $rates; }
忽略统一费率不同的事实,我的客户有 2 个网站,并且希望两个网站的费率相同。

php wordpress woocommerce cart shipping-method
1个回答
0
投票
您的代码中有一个错误,因为没有

$order_total

 函数变量参数,而是 
$package
 (当前的运输包)。

要获取购物车小计,您可以使用:

    小计含税:
  • WC()->cart->subtotal
    ,
  • 不含税小计:
  • WC()->cart->get_subtotal()
所以在你的代码中:

add_filter( 'woocommerce_package_rates', 'hide_specific_shipping_rates_conditionally', 10, 2 ); function hide_specific_shipping_rates_conditionally( $rates, $package ) { if ( WC()->cart->subtotal > 50 ) { if ( isset($rates['flat_rate:1']) ) { unset($rates['flat_rate:1']); } if ( isset($rates['flat_rate:9']) ) { unset($rates['flat_rate:9']); } if ( isset($rates['free_shipping:2']) ) { unset($rates['free_shipping:2']); } } return $rates; }
应该可以。

要刷新运费,添加/保存代码后,清空您的购物车。

© www.soinside.com 2019 - 2024. All rights reserved.