2017-07-12 11 views
1

配送料金の有無にかかわらず、カートに商品が含まれている場合のみ、フラットレート配送方法の設定を解除しようとしています。カート内のすべての製品が出荷クラスを持っている場合は、それが残っている必要があります。 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; 
} 

答えて

1

作業IDナメクジは、私は誤植がある意味、少し異なっていました。スラッグの名前と番号の間に:を追加する必要があります。'flat_rate6'

また、一致するカートアイテムの送料クラスを取得すると、breakのループが可能です。
最後のもの:このフックには、利用可能な引数が2つあります($ratesおよび$package)。

だからあなたのコードは次のようになります。

add_filter('woocommerce_package_rates', 'hide_shipping_when_class_is_in_cart', 100, 2); 
function hide_shipping_when_class_is_in_cart($rates, $package) { 
    // Initialisation 
    $shipping_classes = array(50, 100, 150, 200, 250, 300); 
    $class_exists = false; 

    foreach(WC()->cart->get_cart() as $cart_item) 
     if(in_array($cart_item[ 'data' ]->get_shipping_class_id(), $shipping_classes)) { 
      $class_exists = true; 
      break; // Stop the loop 
     } 

    if($class_exists) 
     unset($rates['flat_rate:6']); 

    return $rates; 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルやも任意のプラグインファイルになります。

これで動作するはずです。

+0

代わりにget_shipping_class()を使用して、スラッグを取得する必要がありました。また、アイテムクラスが出荷クラス配列と一致するかどうかを調べるためにいくつかカウントします。 – Aivaras

関連する問題