WooCommerce:购物车中的每个类别的一个产品

问题描述:

我试图阻止用户将一个以上的商品从特定类别添加到购物车中。我发现这个功能:WooCommerce:购物车中的每个类别的一个产品

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号。 现在我要检查,如果车已经从该类别的项目,如果是这样,从购物车中删除的项目,并显示一条消息:

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进行编码,所以我很确定我的代码中有很多错误。

经过大量的试验和错误,我设法解决我的问题。这是解决方案。

请注意,使用此片段,新项目覆盖旧项目而不是警告客户他们需要删除旧项目。

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

如果你想第一个行为(警告用户,让他们删除项目themelves),你只需要改变过去'if'语句行: '//注释或删除此行:$ woocommerce - > cart-> remove_cart_item($ cart_item_key); $ message = sprintf('您不能从该类别订购两件商品;请先从您的购物车中删除%s。',$ _ product-> get_title()); ' –