在Woocommerce中,如何为特定的选定产品动态关闭一个特定的“统一费率”?
例如
我有三种不同的固定费率选择。
可以使用选项1、2和3发送产品A。
可以使用选项1和2发送产品B。
感谢您的帮助。
答案 0 :(得分:1)
这可以通过以下功能代码完成,您将在其中定义要禁用的相关产品ID和运输方式ID。
要找出正确的送货方式ID,只需使用浏览器开发工具检查“值”参数下相应的“固定费率”单选按钮即可。
您可能必须在常规运输设置中的“ 运输选项”标签下“启用调试模式” ,才能禁用运输缓存。
代码:
add_filter('woocommerce_package_rates', 'product_hide_shipping_method', 10, 2);
function product_hide_shipping_method( $rates, $package ){
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return $rates;
// HERE set your Shipping Method ID to be removed
$shipping_method_id = 'flat_rate:12';
// HERE set your targeted product ID
$product_id = 37;
$found = false;
// Loop through cart items and checking for the specific product ID
foreach( $package['contents'] as $cart_item ) {
if( $cart_item['data']->get_id() == $product_id )
$found = true;
}
if( $found ){
// Loop through available shipping methods
foreach ( $rates as $rate_key => $rate ){
// Remove the specific shipping method
if( $shipping_method_id === $rate->id )
unset($rates[$rate->id]);
}
}
return $rates;
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。
不要忘记在运输设置中重新启用“启用调试模式” 选项。
对于包含多个产品ID的数组,请替换以下行:
// HERE set your targeted product ID
$product_id = 37;
具有:
// Define your targeted product IDs
$product_ids = array(37, 39, 52, 58);
并替换行:
if( $cart_item['data']->get_id() == $product_id )
具有:
if( in_array( $cart_item['data']->get_id(), $product_ids ) )
可变产品的最新信息:如果您希望处理父可变产品ID而不是产品变体ID,请替换代码:
$cart_item['data']->get_id()
具有:
$cart_item['product_id']