当购物车小计超过 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;
}
所以我尝试了这个:
`// 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 个网站,并且希望两个网站的费率相同。
$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;
}
应该可以。要刷新运费,添加/保存代码后,清空您的购物车。