2017-03-01 13 views
0

商品がカートに追加されたら、他のカテゴリの商品を追加できないようにしたいと考えています。顧客は引き続き同じカテゴリのアイテムを追加することができます。ここでWooCommerce:同じカテゴリの商品をカートに入れられますか?

は、私がこれまで持っているものです。

function is_product_the_same_cat($valid, $product_id, $quantity) { 
    global $woocommerce; 
    // start of the loop that fetches the cart items 
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
     $_product = $values['data']; 
     $terms = get_the_terms($_product->id, 'product_cat'); 
     $target_terms = get_the_terms($product_id, 'product_cat'); //get the current items 
     foreach ($terms as $term) { 
      $cat_ids[] = $term->term_id; //get all the item categories in the cart 
     } 
     foreach ($target_terms as $term) { 
      $target_cat_ids[] = $term->term_id; //get all the categories of the product 
     } 
    } 
    $same_cat = array_intersect($cat_ids, $target_cat_ids); //check if they have the same category 
    if(count($same_cat) > 0) return $valid; 
    else { 
     wc_add_notice('This product is in another category!', 'error'); 
     return false; 
    } 
} 
add_filter('woocommerce_add_to_cart_validation', 'is_product_the_same_cat',10,3); 

私はすでに私のカート内のアイテムを持っている場合、これは動作しますが、それは私が空のカートから何かを追加してみましょうと、常にエラーメッセージを表示しません。

ありがとうございます!

答えて

0

いくつかの調整の後、私は、私はそれを考え出したと思う:あなたのis_product_the_same_cat方法で

function is_product_the_same_cat($valid, $product_id, $quantity) { 
    global $woocommerce; 
    if($woocommerce->cart->cart_contents_count == 0){ 
     return true; 
    } 
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 
     $_product = $values['data']; 
     $terms = get_the_terms($_product->id, 'product_cat'); 
     $target_terms = get_the_terms($product_id, 'product_cat'); 
     foreach ($terms as $term) { 
      $cat_ids[] = $term->term_id; 
     } 
     foreach ($target_terms as $term) { 
      $target_cat_ids[] = $term->term_id; 
     }   
    } 
    $same_cat = array_intersect($cat_ids, $target_cat_ids); 
    if(count($same_cat) > 0) return $valid; 
    else { 
     wc_add_notice('This product is in another category!', 'error'); 
     return false; 
    } 
} 
add_filter('woocommerce_add_to_cart_validation', 'is_product_the_same_cat',10,3); 
0

、あなたは、カートが空になったときに実行するために、任意のコードを追加していません。カートが空の時に追加できないことがあります。

グローバル$ woocommerceの後に次のコードを追加します。ライン

if (woocommerce()->cart->get_cart_contents_count() == 0) { 
    return true; 
} 
関連する問題