基于the official WooCommerce snippet code,使得一些光线的变化,您将可以只隐藏你的第一个扁平率时包邮可用:
add_filter('woocommerce_package_rates', 'conditionally_hide_shipping_methods', 100, 2);
function conditionally_hide_shipping_methods($rates, $package) {
// HERE yours 2nd flat rate "Express Shipping" (that you never hide) in the array:
$flat_rates_express = array('flat_rate:5', 'flat_rate:12', 'flat_rate:14');
$free = $flat2 = array();
foreach ($rates as $rate_key => $rate) {
// Updated Here To
if (in_array($rate->id, $flat_rates_express))
$flat2[ $rate_key ] = $rate;
if ('free_shipping' === $rate->method_id)
$free[ $rate_key ] = $rate;
}
return ! empty($free) ? array_merge($free, $flat2) : $rates;
}
代码放在您的活动子主题的function.php文件(或主题)或任何插件文件中。
在WooCommerce 3上测试并工作。
刷新航运缓存:
1)首先清空购物车。
2)此代码已保存在您的function.php文件中。
3)进入运输区域设置并禁用一个“统一费率”(例如)和“保存”。然后重新启用“统一费率”和“保存”。 你完成了,你可以测试它。
你好卢瓦克, 非常感谢你的帮助。你不知道我对你的善意帮助感到多么欣赏。 :) 它适用于我的Zone 1.但是对于Zone 2和Zone 3区域,它只显示免费送货,但不包含Express Shipping选项。我相信这是因为对于每个运输区域,每个快递都有不同的费率ID。例如,Zone 2的快速运费标识为flat_rate:12,Zone 3的快速运费标识为flat_rate:14。 如何更改代码或我的设置,以使条件费率适用于所有3个区域? 谢谢! –
谢谢Loic,它的工作完美:)干杯! –