当Woocommerce仅提供一个区域的免费送货时,隐藏其他送货选项



我需要一种方法来实现以下目标:如果可以免费送货,并且订单正在运送到特定区域,则隐藏所有其他运送方法。

我发现了这个片段:

function hide_shipping_when_free_is_available( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'hide_shipping_when_free_is_available', 100 );

我如何在其中添加一个条件,使其仅适用于前往一个区域的订单?

当特定区域可以免费送货时,以下代码将隐藏所有其他送货方法(您将在函数中定义目标区域ID或区域名称(:

add_filter( 'woocommerce_package_rates', 'free_shipping_hide_others_by_zone', 100, 2 );
function free_shipping_hide_others_by_zone( $rates, $package ) {
// HERE define your shipping zone ID OR the shipping zone name
$defined_zone_id   = '';
$defined_zone_name = 'Europe';
// Get The current WC_Shipping_Zone Object
$zone      = WC_Shipping_Zones::get_zone_matching_package( $package );
$zone_id   = $zone->get_id(); // The zone ID
$zone_name = $zone->get_zone_name(); // The zone name
$free      = array(); // Initializing
// Loop through shipping rates
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id && ( $zone_id == $defined_zone_id || $zone_name == $defined_zone_name ) ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}

代码位于活动子主题(或活动主题(的function.php文件中。测试并工作。

/**
* Hide shipping rates when free shipping is available.
* Updated to support WooCommerce 2.6 Shipping Zones.
*
* @param array $rates Array of rates found for the package.
* @return array
*/
function my_hide_shipping_when_free_is_available( $rates ) {
$free = array();
foreach ( $rates as $rate_id => $rate ) {
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
break;
}
}
return ! empty( $free ) ? $free : $rates;
}
add_filter( 'woocommerce_package_rates', 'my_hide_shipping_when_free_is_available', 100 );

相关内容

最新更新