这是这个问题的延伸: 删除航运特定类别,统一收费方法WooCommerce 2.6和3+
使用吴氏智能券插件用于礼品卡产品。 这已被设置为变化,因为我们有多个层次的选择。 (消除了虚拟产品)的礼品卡都有它自己的类别区分。 我们已经成立了两个运输方案:单一税率+本地拾取。 这是非常愚蠢的有该被发送到您的收件箱礼品卡的航运选择,所以我用在上面的链接找到下面的代码片段:
add_filter( 'woocommerce_package_rates', 'conditional_hide_shipping_methods', 100, 2 );
function conditional_hide_shipping_methods( $rates, $package ){
// Define/replace here your correct category slug (!)
$product_category = 'coupons-gift-cards';
$prod_cat = false;
foreach ( WC()->cart->get_cart() as $cart_item ) {
$product_id = $cart_item['product_id'];
if ( has_term( $product_category, 'product_cat', $product_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;
}
工程就像一个魅力...直到您添加了从该类别不是一个产品。 如果有人决定,他们希望礼品卡和普通产品,那么正规的运输选择必须放回原处。
编辑:检查答案完美的作品! 如果你想使他们这样说:“下载”,而不是“皮卡”改变皮卡标签像上述情况的项目,则该检查哪些产品匹配类别的IF语句后添加此行
foreach( $rates as $rate_key => $rate ) {
//change local_pickup:1 to your shipping method
if ( 'local_pickup:1' == $rate_key){
//set the text for the label
$rates[$rate_key]->label = __( 'Download', 'woocommerce' );
}
}