我的解决方案基于以下源代码片段:https://www.xadapter.com/woocommerce-hide-shipping-methods-if-items-of-specific-shipping-class-is-not-in-cart/
我在WooCommerce中创建了一个新的Shipping类,名为“no free Shipping”(slug很重要,因为如果您有不同的东西,必须在代码中替换它)
在函数中。php文件在WordPress主题中,添加以下代码:
add_filter(\'woocommerce_package_rates\', \'xa_hide_shipping_method_when_shipping_class_product_is_in_cart\', 10, 2);
function xa_hide_shipping_method_when_shipping_class_product_is_in_cart($available_shipping_methods, $package){
// Shipping class IDs that need the method removed
$shipping_classes = array(
\'no-free-shipping\',
);
$shipping_services_to_hide = array(
\'free_shipping:1\'
);
$shipping_class_exists = false;
foreach(WC()->cart->cart_contents as $key => $values) {
if (in_array($values[\'data\']->get_shipping_class() , $shipping_classes)) {
$shipping_class_exists = true;
break;
}
}
// Negation of shipping class exists.
if($shipping_class_exists) {
foreach($shipping_services_to_hide as & $value) {
//echo var_dump($available_shipping_methods);
unset($available_shipping_methods[$value]);
}
}
return $available_shipping_methods;
}
我最大的问题是确定我的“免费送货”选项的名称,因为WooCommerce中没有明确定义的slug。为了找到这个,我使用了注释掉的
echo var_dump($available_shipping_methods);
打印出发货选项的名称(在我的示例中为“free\\u shipping:1”),我将其包含在代码中以使其正常工作。
现在,如果将任何具有“no free shipping”装运类别的产品添加到购物车中,则将删除“free shipping”选项。