配送料金の有無にかかわらず、カートに商品が含まれている場合のみ、フラットレート配送方法の設定を解除しようとしています。カート内のすべての製品が出荷クラスを持っている場合は、それが残っている必要があります。 50、100というように、ナメクジの名前と同じ方法で::50、100 ...カート商品の送料クラスに基づいてWooCommerceの配送方法を設定解除する
- (flat_rate1)(INSTANCE_ID = 1)
そして、これらの出荷クラスのフラットレート:
は、この配送方法を持っていますフラットレート配送方法では、これらの配送クラスに費用が設定されていますが、この方法ではメインコストと配送クラスコストは設定されていないため、配送クラスが設定されたカート内の商品にのみ表示されます。
はそれが配送方法WooCommerceで
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()を使用して、スラッグを取得する必要がありました。また、アイテムクラスが出荷クラス配列と一致するかどうかを調べるためにいくつかカウントします。 – Aivaras