2016-12-06 7 views
2

このコードでは1つの製品のみを購入することができますが、変更が可能かどうかは疑問です。特定の製品サブカテゴリからカートアイテム1個を条件付きで制限

コード:

add_filter('woocommerce_add_cart_item_data', 'woo_custom_add_to_cart'); 

function woo_custom_add_to_cart($cart_item_data) { 
global $woocommerce; 
$woocommerce->cart->empty_cart(); 

return $cart_item_data; 
} 

顧客は、この特定の製品のサブカテゴリからカートに新製品を追加するのであれば、それはアイテムがカートにすでに存在する場合、この製品のサブカテゴリからチェックし、それをあれば削除します新鮮な添加物を維持している場合です。

これをどのように達成できますか?

ありがとうございました。

答えて

2

フックwoocommerce_add_cart_item_dataあなたのコードで使用され、完全にすべてのカートアイテムを空にする$woocommerce->cart->empty_cart();は、あなたが求めているものに充当されません。また、このコードは古いものです。

あなたは(あなたはそれが仕事を得るためにあなたのサブカテゴリスラグを設定する必要があります)、このコードを試してみてください代わりに、必要なものを取得するには:

add_action('woocommerce_before_calculate_totals', 'add_custom_total_price', 10, 1); 
function add_custom_total_price($cart_object) { 

    if (is_admin() && ! defined('DOING_AJAX')) 
     return; 

    if (!WC()->cart->is_empty()): 

     // Set HERE your subcategory (can be an ID, a slug or the name) 
     $subcategory = 't-shirts'; 
     $count_sub_cat = 0; 

     // First cart loop: Counting number of subactegory items in cart 
     foreach ($cart_object->cart_contents as $cart_item) 
      if(has_term($subcategory, 'product_cat', $cart_item['data']->id)) 
       $count_sub_cat++; 

     // Second cart loop: Removing subactegory items if more than one (keeping the last one) 
     foreach ($cart_object->cart_contents as $cart_key => $item) { 
      if($count_sub_cat > 1) { 
       WC()->cart->remove_cart_item($cart_key); 
       break; 
      } 
     } 

    endif; 
} 

このコードはテストされ、完全に機能しています。

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

+0

ありがとう、完璧な作品 –

関連する問題