2016-11-12 15 views
0

ユーザーが特定のカテゴリの複数の商品をカートに追加できないようにしようとしています。私はその機能を見つけました:WooCommerce:カートのカテゴリごとに1つの製品

function cart_has_licence_in_it() 
{ 
    //Check to see if user has product in cart 
    global $woocommerce; 
    //assigns a default negative value 
    $product_in_cart = false; 

    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { 

    $_product = $values['data']; 
    $terms = get_the_terms($_product->id, 'product_cat'); 

    if ($terms) { 
     foreach ($terms as $term) { 
     $_categoryid = $term->term_id; 

     if ($_categoryid === 23) { 
      $product_in_cart = true; 

     } 
     } 

    } 
    } 
    return $product_in_cart; 
} 

私はこのためにカテゴリID番号を23に変更しました。私にはない、

add_filter('woocommerce_add_cart_item_data', 'woo_custom_add_to_cart'); 

function woo_custom_add_to_cart($cart_item_data) { 
global $woocommerce; 
$categorie = get_the_terms($cart_item_data->id, 'product_cat'); 
$_lacat = $categorie->term_id; 
if (($_lacat===23)&&(cart_has_licence_in_it())) { 
     wc_add_notice('You cannot add this license to your cart because there is already another license in it. Please remove the other license from your cart first.', 'error'); 
     $woocommerce->cart->remove_cart_item($cart_item_data->id); 
    } 
else return $cart_item_data; 
} 

しかし、それは動作しません: 今私はカートがすでにそのカテゴリからアイテムを持っているかどうかを確認したい、そうであれば、メッセージをカートからアイテムを削除して表示しますメッセージを受け取ることさえできます。

WordPressとPHPを一般的にコーディングするのは初めてですが、私のコードには間違いがたくさんあります。

答えて

1

多くの試行錯誤の末、私は自分の問題を解決することができました。ここに解決策があります。

このスニペットでは、古い商品を削除する必要があることを顧客に警告するのではなく、古い商品を上書きします。 `//コメントや、この行を削除します:あなたが最初に行動をしたい場合は

add_filter('woocommerce_add_to_cart', 'my_woocommerce_add_to_cart', 8, 6); 

function my_woocommerce_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data){ 
global $woocommerce; 
$_category_id = 23; //put your category ID here 

//Doe the item you added belong to that category ? 

$_categorie = get_the_terms($product_id, 'product_cat'); 
if ($_categorie) { 
    $product_is_licence = false; 
    foreach ($_categorie as $_cat) { 
     $_lacat = $_cat->term_id; 
     if ($_lacat === $_category_id) { 
      $product_is_licence = true; 
     } 
    } 
} 

//If it does, remove all items from same category from cart 

if($product_is_licence){ 
    foreach ($woocommerce->cart->get_cart() as $cart_item_key => $value) { 
     $_product = $value['data']; 
     $_thisID = $_product->id; 
     $terms = get_the_terms($_product->id, 'product_cat'); 
     if ($terms) { 
      foreach ($terms as $term) { 
       $_categoryid = $term->term_id; 
       if (($_categoryid === $_category_id)&&($product_id !== $_thisID)) { 
        $woocommerce->cart->remove_cart_item($cart_item_key); 
        $message = sprintf('%s has been removed from your cart.',$_product->get_title()); //displays the removal message 
        wc_add_notice($message, 'success'); 
       } 
      } 
     } 
    } 
} 
} 
+0

あなただけの最後の' if'文の行を変更する必要が(彼らがアイテムにthemelvesを削除持っているユーザーに警告)$のwoocommerce - >カート - > remove_cart_item($ cart_item_key); $ message = sprintf( 'そのカテゴリから2つのアイテムを注文することはできません;最初にカートから%sを取り除いてください。'、$ _ product-> get_title()); ' –

関連する問題