2016-11-12 106 views
0

我試圖阻止用戶將一個以上的商品從特定類別添加到購物車中。我發現這個功能: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進行編碼,所以我很確定我的代碼中有很多錯誤。

回答

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

如果你想第一個行爲(警告用戶,讓他們刪除項目themelves),你只需要改變過去'if'語句行: '//註釋或刪除此行:$ woocommerce - > cart-> remove_cart_item($ cart_item_key); $ message = sprintf('您不能從該類別訂購兩件商品;請先從您的購物車中刪除%s。',$ _ product-> get_title()); ' –

相關問題