在此基础上的答案(下面的代码) ,我成功地可以隐藏扁平率从具体的产品类别和地方交付选项可用。 这是工作完美。
问题: 本地皮卡选项不适用于特定类别。
我怎样才能提供给这个特殊类别本地拾取选项?
这是我使用的代码:
function custom_shipping_methods( $rates ){
// Define/replace here your correct category slug (!)
$cat_slug = 'your_category_slug';
$prod_cat = false;
// Going through each item in cart to see if there is anyone of your category
foreach ( WC()->cart->get_cart() as $values ) {
$item = $values['data'];
if ( has_term( $cat_slug, 'product_cat', $item->id ) )
$prod_cat = true;
}
$rates_arr = array();
if ( $prod_cat ) {
foreach($rates as $key => $rate) {
if ('free_shipping' === $rate->method_id || 'local_pickup' === $rate->method_id || 'local_delivery' === $rate->method_id) {
$rates_arr[ $rate_id ] = $rate;
break;
}
}
}
return !empty( $rates_arr ) ? $rates_arr : $rates;
}
add_filter( 'woocommerce_package_rates', 'custom_shipping_methods', 100);
还有一两件事:有没有可能以示对因位置特殊类别的局部输送和本地拾取 ?
目前在我的商店当地发货或收货的也仅限于一个位置。
建议: 只针对WooCommerce版本2.6.x的(对于WC增加兼容性3+)
许多测试之后......你需要改变你的代码2的小东西:
add_filter( 'woocommerce_package_rates', 'custom_shipping_methods', 100, 2 );
function custom_shipping_methods( $rates, $package ){
// Define/replace here your correct category slug (!)
$cat_slug = 'posters';
$prod_cat = false;
// Going through each item in cart to see if there is anyone of your category
foreach ( WC()->cart->get_cart() as $values ) {
$product = $values['data'];
// compatibility with WC +3
$product_id = method_exists( $product, 'get_id' ) ? $product->get_id() : $product->id;
if ( has_term( $cat_slug, 'product_cat', $product_id ) )
$prod_cat = true;
}
$rates_arr = array();
if ( $prod_cat ) {
foreach($rates as $rate_id => $rate) { // <== There was a mistake here
if ('free_shipping' === $rate->method_id || 'local_pickup' === $rate->method_id || 'local_delivery' === $rate->method_id) {
$rates_arr[ $rate_id ] = $rate;
// break; // <========= Removed this to avoid stoping the loop
}
}
}
return !empty( $rates_arr ) ? $rates_arr : $rates;
}
有2个失误:
- 一个与我有更换坏的变量名foreach循环。
- 删除
break;
避免回采foreach循环时一个条件相匹配。
这一代码进入您的当前儿童主题或主题的function.php文件。
此代码测试和功能齐全的 (如果你设置了正确的航运区,将工作)。
您将需要刷新航运缓存数据:禁用,保存并启用,保存当前航运区相关的运输方式,在woocommerce送货设置。
参考文献:
- 隐藏其他的运输方式后免费运送可用
- WooCommerce -隐藏其他的运输方式后免费运送可用
文章来源: Shipping methods - Local Pickup option not available when Flat Rate is hidden