2016-11-03 8 views
0

私はいくつかの食事パッケージを販売しています。例えば。 チキンミールにはバリエーションがあります:10パック、14パック、18パック。 私はflat_rateを無効にしたい:3人が10パックを注文するとき。しかし、私はそのバリエーションを得る方法を知らない。 私のコードは以下の通りです:カートで商品バリエーションを取得するには?

function hide_one_delivery($rates, $item_id) { 
    global $woocommerce, $product; 
    $10_pack = 0; 
    foreach ($woocommerce->cart->cart_contents as $product) { 
     $variation_data = $product->get_variation_attributes(); 
     $variation_detail = woocommerce_get_formatted_variation($variation_data, true); 
     if($variation_detail == "10 pack"){ 
      $10_pack += 1; 
     } 
    } 
    if ($10_pack > 0){ 
     unset($rates['flat_rate:3']); 
    } 
    return $rates; 
} 
add_filter('woocommerce_package_rates', 'hide_one_delivery', 100); 

これは機能しません。 anyopneは助けてもらえますか?

答えて

1

製品の配列を調べるだけで、製品の配列からバリエーションデータを取得できます。

function hide_one_delivery($rates, $item_id) { 
    global $woocommerce; 

    foreach ($woocommerce->cart->cart_contents as $product) { 
     //$product is a array, and 10-pack is the slug of the attribute name 
     if ($product['variation_id'] && in_array('10-pack', $product['variation'])) { 

      unset($rates['flat_rate:3']); 
      break; 

     } 

    } 

    return $rates; 
} 
add_filter('woocommerce_package_rates', 'hide_one_delivery', 100, 2); 
関連する問題