【发布时间】:2019-07-02 20:08:24
【问题描述】:
在This site (here) (WP v4.9) 上使用 WooCommerce v3.2.4 和 11 种运输类别为超重/超大且适用统一费率的产品:
$20 至加拿大和 $25 到美国。
所有其他产品的统一运费为 $10(加拿大)和 $15(美国),除非订单超过 $100,然后自动应用免费送货。
如果购物车中有任何超重/超大商品,我的客户希望禁用免费送货。问题在于,当购物车中混合有常规商品和大件商品且未应用任何运输方式时,购物车显示没有可用的运输方式。
我正在使用XAdapter Woocommerce Shipping Table Rate 插件将更高的成本应用于“超重”运输类别。
更新
我停用了这个插件,因为我意识到我可以使用 WooCommerce Shipping Zone 设置为特定的运输类别设置统一费率。请看下面的截图:
我正在使用一些代码来:
- 当购物车中存在“超重”运输类别时隐藏免费送货和统一费率
- 如果该类不存在,则隐藏“超重”运输方法(163 是运输类的 id)...
代码如下:
add_filter('woocommerce_package_rates', 'wf_hide_shipping_method_based_on_shipping_class', 100, 2);
function wf_hide_shipping_method_based_on_shipping_class($available_shipping_methods, $package){
$hide_when_shipping_class_exist = array(
163 => array(
'flat_rate:1',
'flat_rate:2',
'free_shipping:3',
'free_shipping:5'
)
);
$hide_when_shipping_class_not_exist = array(
163 => array( 'wf_woocommerce_shipping_pro:overweightoversizeoverweight')
);
$shipping_class_in_cart = array();
foreach(WC()->cart->cart_contents as $key => $values) {
$shipping_class_in_cart[] = $values['data']->get_shipping_class_id();
}
foreach($hide_when_shipping_class_exist as $class_id => $methods) {
if(in_array($class_id, $shipping_class_in_cart)){
foreach($methods as & $current_method) {
unset($available_shipping_methods[$current_method]);
}
}
}
foreach($hide_when_shipping_class_not_exist as $class_id => $methods) {
if(!in_array($class_id, $shipping_class_in_cart)){
foreach($methods as & $current_method) {
unset($available_shipping_methods[$current_method]);
}
}
}
return $available_shipping_methods;
}
编辑
以下是每个配送区域的费率 ID 列表:
加拿大
- 定期统一费率 |编号:
flat_rate:1 - 免运费 |编号:
free_shipping:3 - 本地取货 |编号:
local_pickup:4
美国
- 定期统一费率 |编号:
flat_rate:2 - 免运费 |编号:
free_shipping:5
【问题讨论】:
-
我们创建了一个插件来根据各种条件(包括运输类别和位置)隐藏运输方式。 elextensions.com/plugin/…
标签: php wordpress woocommerce cart shipping