1
我试图只在购物车有产品时才会包含和不包含运输类别时才会解除统一运费方式。如果购物车中的所有产品都有运输类,那么它应该停留。根据购物车项目运输类别取消设置WooCommerce运输方式
有这种运输方式:固定费率 - (flat_rate1)(INSTANCE_ID = 1)
而且这些航运类:50,100等,以同样的方式命名蛞蝓:50,100 ...
统一费率运输方式为这些运输类别设置了成本,未设置此方法的主要成本和运输类别成本,因此仅适用于设置了运输类别的购物车中的产品。
得到它的工作
add_filter('woocommerce_package_rates', 'unset_shipping_for_unmatched_items', 100, 2);
function unset_shipping_for_unmatched_items($rates, $package) {
// Initialisation
$shipping_classes = array(50, 100, 150, 200, 250, 300);
$cart_items = WC()->cart->get_cart();
$cart_items_count = WC()->cart->get_cart_contents_count();
$items_match = false;
$inArray = 0;
$notInArray = 0;
foreach($cart_items as $cart_item){
if(in_array($cart_item[ 'data' ]->get_shipping_class(), $shipping_classes) && $cart_items_count > 1) {
$inArray++;
} else {
$notInArray++;
}
}
if(($cart_items_count == $notInArray) || ($cart_items_count == $inArray)){
$items_match = false;
} else {
$items_match = true;
}
if($items_match)
unset($rates['flat_rate:6']);
return $rates;
}
得到它的工作,需要使用get_shipping_class()来代替slug来使用数组。还有一些计数来检查物品类是否与运输类数组相匹配。 – Aivaras