当 WooCommerce 中提供免费送货时,仅禁用特定的固定费率送货方式
Disable only specific flat rate shipping method when free shipping is available in WooCommerce
我的 WooCommerce 网站上有两种固定费率,我想在启用免费送货后禁用其中一种。我有一个功能仅适用于所有统一费率。
如何检查运费的实例 ID?谁能帮助我了解如何检查实例 ID?
我试图回显运输数据以了解可用的值,但前端也没有显示回显,所以提示为什么会很好。
这是我的代码尝试:
function hide_shipping_when_free_is_available( $rates, $package ) {
$new_rates = array();
foreach ( $rates as $rate_id => $rate ) {
// Only modify rates if free_shipping is present.
if ( 'free_shipping' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if ( ! empty( $new_rates ) ) {
//Save local pickup if it's present.
foreach ( $rates as $rate_id => $rate ) {
if ('local_pickup' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
}
if ( 'flat_rate:20' === $rate->instance_id )
$new_rates[ $rate_id ] = $rate;
}
return $new_rates;
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
如果您检查购物车或结账时的送货方式单选按钮,您会看到如下内容:
<input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_flat_rate20" value="flat_rate:20" class="shipping_method" checked="checked">
所以在 value="flat_rate:20"
(这是速率 ID):
- 方法 Id 是
flat_rate
,
- 和实例ID是
20
.
注意:代码真的可以简化...
但由于您不提供免费送货和其他固定费率 费率 ID (或实例 ID),我保留您的代码对其进行一些更改,这样:
function hide_shipping_when_free_is_available( $rates, $package ) {
$new_rates = array();
foreach ( $rates as $rate_id => $rate ) {
// Only modify rates if free_shipping is present.
if ( 'free_shipping' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if ( ! empty( $new_rates ) ) {
foreach ( $rates as $rate_id => $rate ) {
//Save local pickup if it's present.
if ('local_pickup' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
}
if ( 20 == $rate->instance_id )
$new_rates[ $rate_id ] = $rate;
}
}
return $new_rates;
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
应该可以。
您可以根据其id查看是否可以免费送货。如果可用,它会删除运费 flat_rate:20
。
Replace free_shipping:2
with your free shipping id.
// 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;
}
代码已经过测试并且可以工作。将其添加到您的活动主题 functions.php.
我的 WooCommerce 网站上有两种固定费率,我想在启用免费送货后禁用其中一种。我有一个功能仅适用于所有统一费率。
如何检查运费的实例 ID?谁能帮助我了解如何检查实例 ID?
我试图回显运输数据以了解可用的值,但前端也没有显示回显,所以提示为什么会很好。
这是我的代码尝试:
function hide_shipping_when_free_is_available( $rates, $package ) {
$new_rates = array();
foreach ( $rates as $rate_id => $rate ) {
// Only modify rates if free_shipping is present.
if ( 'free_shipping' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if ( ! empty( $new_rates ) ) {
//Save local pickup if it's present.
foreach ( $rates as $rate_id => $rate ) {
if ('local_pickup' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
}
if ( 'flat_rate:20' === $rate->instance_id )
$new_rates[ $rate_id ] = $rate;
}
return $new_rates;
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
如果您检查购物车或结账时的送货方式单选按钮,您会看到如下内容:
<input type="radio" name="shipping_method[0]" data-index="0" id="shipping_method_0_flat_rate20" value="flat_rate:20" class="shipping_method" checked="checked">
所以在 value="flat_rate:20"
(这是速率 ID):
- 方法 Id 是
flat_rate
, - 和实例ID是
20
.
注意:代码真的可以简化...
但由于您不提供免费送货和其他固定费率 费率 ID (或实例 ID),我保留您的代码对其进行一些更改,这样:
function hide_shipping_when_free_is_available( $rates, $package ) {
$new_rates = array();
foreach ( $rates as $rate_id => $rate ) {
// Only modify rates if free_shipping is present.
if ( 'free_shipping' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
break;
}
}
if ( ! empty( $new_rates ) ) {
foreach ( $rates as $rate_id => $rate ) {
//Save local pickup if it's present.
if ('local_pickup' === $rate->method_id ) {
$new_rates[ $rate_id ] = $rate;
}
if ( 20 == $rate->instance_id )
$new_rates[ $rate_id ] = $rate;
}
}
return $new_rates;
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 10, 2 );
应该可以。
您可以根据其id查看是否可以免费送货。如果可用,它会删除运费 flat_rate:20
。
Replace
free_shipping:2
with your free shipping id.
// 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;
}
代码已经过测试并且可以工作。将其添加到您的活动主题 functions.php.