2016-08-13 40 views
1

Based on this answer (code below),我成功地可以隱藏特定產品類別本地傳遞選項扁平率可用。這是完美的。配送方式 - 本地拾取選項不可用時,扁平率是隱藏

問題:對於該特定類別,本地取件選項不可用

如何使本地皮卡選項可用於此特殊類別?

這是我使用的代碼:

function custom_shipping_methods($rates){ 

    // Define/replace here your correct category slug (!) 
    $cat_slug = 'your_category_slug'; 
    $prod_cat = false; 

    // Going through each item in cart to see if there is anyone of your category   
    foreach (WC()->cart->get_cart() as $values) { 
     $item = $values['data']; 

     if (has_term($cat_slug, 'product_cat', $item->id)) 
      $prod_cat = true; 
    } 

    $rates_arr = array(); 

    if ($prod_cat) { 
     foreach($rates as $key => $rate) { 
      if ('free_shipping' === $rate->method_id || 'local_pickup' === $rate->method_id || 'local_delivery' === $rate->method_id) { 
       $rates_arr[ $rate_id ] = $rate; 
       break; 
      } 
     } 
    } 
    return !empty($rates_arr) ? $rates_arr : $rates; 
} 
add_filter('woocommerce_package_rates', 'custom_shipping_methods', 100); 

一件事:有沒有可能顯示本地傳遞並根據位置特殊類別本地拾取

當前在我的店鋪本地取貨送貨僅適用於一個位置。

回答

1

建議:只爲WooCommerce版本2.6.x的(對於WC增加兼容性3+)

許多測試...你需要改變你的代碼2的小東西后:

add_filter('woocommerce_package_rates', 'custom_shipping_methods', 100, 2); 
function custom_shipping_methods($rates, $package){ 

    // Define/replace here your correct category slug (!) 
    $cat_slug = 'posters'; 
    $prod_cat = false; 

    // Going through each item in cart to see if there is anyone of your category 
    foreach (WC()->cart->get_cart() as $values) { 
     $product = $values['data']; 

     // compatibility with WC +3 
     $product_id = method_exists($product, 'get_id') ? $product->get_id() : $product->id; 

     if (has_term($cat_slug, 'product_cat', $product_id)) 
      $prod_cat = true; 
    } 

    $rates_arr = array(); 

    if ($prod_cat) { 
     foreach($rates as $rate_id => $rate) { // <== There was a mistake here 

      if ('free_shipping' === $rate->method_id || 'local_pickup' === $rate->method_id || 'local_delivery' === $rate->method_id) { 
       $rates_arr[ $rate_id ] = $rate; 
       // break; // <========= Removed this to avoid stoping the loop 
      } 
     } 
    } 
    return !empty($rates_arr) ? $rates_arr : $rates; 
} 

有2個失誤:

  • 一個在foreach循環中用一個壞的變量名替換它。
  • 刪除break;避免在一個條件匹配時停止foreach循環。

這一代碼進入你的活動的子主題或主題的function.php文件。

此代碼經過測試,功能齊全(如果你設置了正確的航運區,將工作)

您將需要刷新航運緩存數據:關閉,保存並啓用,保存當前航運區相關的運輸方式,在woocommerce送貨設置。


參考文獻:

+0

大。非常感謝你。它的工作完美:) –

+0

@ZahidIqbal有一個愚蠢的錯誤和'突破;'...見你周圍:) ... – LoicTheAztec

相關問題