The*_*ery 5 php wordpress cart woocommerce
在本网站(此处)上使用 WooCommerce v3.2.4 (WP v4.9) 和 11 种运输类别为超重/超大且适用统一费率的产品:运往加拿大
20 美元,运往美国25 美元。
所有其他产品的统一运费为10 美元(加拿大)和15 美元(美国),除非订单超过100 美元,否则自动免运费。
\n我的客户希望在购物车中有任何超重/超大物品时禁用免费送货。问题是,当购物车中混合有常规商品和超大商品时,购物车表示没有可用的送货方式,并且没有应用任何送货方式。
\n我正在使用XAdapter Woocommerce Shipping Table Rate插件将较高的成本应用于“超重”运输类别。
\n我停用了这个插件,因为我意识到我可以使用 WooCommerce 运输区域设置来为特定运输类别设置统一费率。请参阅下面的屏幕截图:\n
我正在使用一些代码来:
\n这是该代码:
\nadd_filter(\'woocommerce_package_rates\', \'wf_hide_shipping_method_based_on_shipping_class\', 100, 2);\n\nfunction wf_hide_shipping_method_based_on_shipping_class($available_shipping_methods, $package){\n $hide_when_shipping_class_exist = array(\n 163 => array(\n \'flat_rate:1\',\n \'flat_rate:2\',\n \'free_shipping:3\',\n \'free_shipping:5\'\n )\n );\n\n $hide_when_shipping_class_not_exist = array(\n 163 => array( \'wf_woocommerce_shipping_pro:overweightoversizeoverweight\')\n );\n\n $shipping_class_in_cart = array();\n foreach(WC()->cart->cart_contents as $key => $values) {\n $shipping_class_in_cart[] = $values[\'data\']->get_shipping_class_id();\n }\n\n foreach($hide_when_shipping_class_exist as $class_id => $methods) {\n if(in_array($class_id, $shipping_class_in_cart)){\n foreach($methods as & $current_method) {\n unset($available_shipping_methods[$current_method]);\n }\n }\n }\n\n foreach($hide_when_shipping_class_not_exist as $class_id => $methods) {\n if(!in_array($class_id, $shipping_class_in_cart)){\n foreach($methods as & $current_method) {\n unset($available_shipping_methods[$current_method]);\n }\n }\n }\n return $available_shipping_methods;\n}\n
Run Code Online (Sandbox Code Playgroud)\n以下是每个运输区域的费率 ID 列表:
\n加拿大
\nflat_rate:1
free_shipping:3
local_pickup:4
美国
\nflat_rate:2
free_shipping:5
更新2:( 无需任何插件,只需设置和代码)
以下功能将始终显示加拿大的“本地取货”运输,并且将:
这是该代码:
add_filter('woocommerce_package_rates', 'wf_hide_shipping_method_based_on_shipping_class', 100, 2);
function wf_hide_shipping_method_based_on_shipping_class($rates, $package){
// Defining & Initializing variables
$free_shipping_rates = array(
'free_shipping:3',
'free_shipping:5'
);
// Defining & Initializing variables
$shipping_class_id = 163;
$free = array();
$over_found = $has_free = false;
// Check if "Oversize" shipping class (163) is in cart items
foreach(WC()->cart->get_cart() as $key => $cart_item){
if($cart_item['data']->get_shipping_class_id() == $shipping_class_id ){
$over_found = true;
break;
}
}
// 1. Hiding free shipping but always show Local pickup for Canada
if( $over_found ){
foreach($free_shipping_rates as $rate_id) {
unset( $rates[$rate_id] );
}
}
// 2. Hiding Flat rate OR Free shipping --> depending on cart amount
// (but always show Local pickup for Canada)
else {
foreach ( $rates as $rate_id => $rate ) {
// Hide all "Flat rates" when "Free Shipping" is available
if ( 'free_shipping' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
$has_free = true;
} elseif ( 'local_pickup' === $rate->method_id ) {
$free[ $rate_id ] = $rate;
}
}
return $has_free ? $free : $rates;
}
return $rates;
}
Run Code Online (Sandbox Code Playgroud)
代码位于活动子主题(或主题)的 function.php 文件中或任何插件文件中。
在 WooCommerce 3 上测试并有效。
刷新运输缓存(有时需要):
1)首先清空您的购物车。
2) 此代码已保存在您的 function.php 文件中。
3) 进入运输区域设置并禁用一项“统一费率” (例如)和“保存”。然后重新启用“统一费率”和“保存”。你已经完成了,你可以测试它。