如果购物车中有特定的货运类,我会尝试停用送货方式。我正在使用最新的woocommerce版本。
以下是我的任务代码。
它位于我主题的functions.php
文件的末尾。
可悲的是它没有用。
add_filter( 'woocommerce_package_rates', 'businessbloomer_hide_free_shipping_for_shipping_class', 10, 2 );
function businessbloomer_hide_free_shipping_for_shipping_class( $rates, $package ) {
$shipping_class_target = 513; // ID OF MY SHIPPING_CLASS
$in_cart = false;
foreach( WC()->cart->cart_contents as $key => $values ) {
if( $values[ 'data' ]->get_shipping_class_id() == $shipping_class_target ) {
$in_cart = true;
break;
}
}
if( $in_cart ) {
unset( $rates['flat_rate:2'] ); //VALUE:ID OF MY SHIPPING METHOD
}
return $rates;
}
答案 0 :(得分:3)
我已经测试过简化你的代码(使用我的WC设置的ID)并且有效:
add_filter( 'woocommerce_package_rates', 'custom_hide_shipping_methods', 10, 2 );
function custom_hide_shipping_methods( $rates, $package ) {
foreach( WC()->cart->get_cart() as $cart_item ) {
$product = $cart_item[ 'data' ]; // The WC_Product object
if( $product->get_shipping_class_id() == 513 ) { // <== ID OF MY SHIPPING_CLASS
unset( $rates['flat_rate:2'] ); // Removing specific shipping method
break; // we stop the loop
}
}
return $rates;
}
因此您的代码也应该正常工作 (如果您设置了正确的ID)
但是你需要(将你的代码保存到活动主题的function.php文件中):
1)删除测试时保留在购物车中的所有购物车商品。
2)刷新送货缓存:
要做到这一点,你可以进入一个运输区并禁用一个&#34;统一费率&#34; (例如)和&#34;保存&#34;。然后重新启用&#34;统一费率&#34;并且&#34;保存&#34;。你完成了。
现在您可以再次测试,它应该可以正常工作