2017-07-19 168 views
0

我有一个商店,包含5个类别。这是多供应商,由于运输的复杂性,当他们独自在购物车时,我只能从一个特定类别('油漆')销售产品。因此,当购物车中含有油漆时,我需要防止添加任何非油漆产品,并显示错误消息,并且我需要防止将油漆产品添加到包含任何其他类别的购物车中,并消除错误消息。防止添加到购物车,如果购物车包含特定类别(WooCommerce)

我试着凑齐这些代码片段,我发现躺在Stackoverflow和其他地方。逻辑似乎在我的大脑中工作,但是当我尝试实现代码(通过functions.php)时,它会阻止任何产品被添加到购物车,除非购物车是空的。

这里是我的代码:

//*** Prevent mixture of paint and other prods in same cart ***// 
function dont_add_paint_to_cart_containing_other() { 

// Set flag false until we find a product in cat paint 
$cat_check = false; 

// Set $cat_check true if a cart item is in paint cat 
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { 

    $product = $cart_item['data']; 

    if (has_term('paint', 'product_cat', $product->id)) { 
       $cat_check = true; 
     // break because we only need one "true" to matter here 
     break; 
     } 
} 
// Return true if cart empty 
if (WC()->cart->get_cart_contents_count() == 0) { 
    return true; 
    } 
    // If cart contains paint and product to be added is not paint, display error message and return false. 
    elseif ($cat_check && get_queried_object()->term_id != '245778522') { 
     wc_add_notice('Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again' , 'error'); 
     return false; 
    } 
    // If cart contains a product that is not paint and product to be added is paint, display error message and return false. 
    elseif (!$cat_check && get_queried_object()->term_id = '245778522') { 
     wc_add_notice('Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again' , 'error'); 
     return false; 
    } 
    // Otherwise, return true. 
    return true; 
} 

add_filter('woocommerce_add_to_cart_validation', 'dont_add_paint_to_cart_containing_other'); 

回答

1
//*** Prevent mixture of paint and other prods in same cart ***// 
function dont_add_paint_to_cart_containing_other($validation, $product_id) { 

// Set flag false until we find a product in cat paint 
    $cart_has_paint = false; 

// Set $cat_check true if a cart item is in paint cat 
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) { 

     $product = $cart_item['data']; 

     if (has_term('paint', 'product_cat', $product->id)) { 
      $cart_has_paint = true; 
      // break because we only need one "true" to matter here 
      break; 
     } 
    } 

    $product_is_paint = false; 
    if (has_term('paint', 'product_cat', $product_id)) { 
     $product_is_paint = true; 
    } 

// Return true if cart empty 
    if (!WC()->cart->get_cart_contents_count() == 0) { 
     // If cart contains paint and product to be added is not paint, display error message and return false. 
     if ($cart_has_paint && !$product_is_paint) { 
      wc_add_notice('Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again', 'error'); 
      $validation = false; 
     } 
     // If cart contains a product that is not paint and product to be added is paint, display error message and return false. 
     elseif (!$cart_has_paint && $product_is_paint) { 
      wc_add_notice('Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again', 'error'); 
      $validation = false; 
     } 
    } 
    // Otherwise, return true. 
    return $validation; 
} 

add_filter('woocommerce_add_to_cart_validation', 'dont_add_paint_to_cart_containing_other', 10, 2); 

更改这个

+0

谢谢你,ashvek。你是温柔的人和学者。 –

+0

请标记答案的权利 – ashvek

0
// If cart contains a product that is not paint and product to be added is paint, display error message and return false. 
    elseif (!$cat_check && get_queried_object()->term_id = '245778522') { 
     wc_add_notice('Sorry, you can only purchase paint products on their own. To purchase this product, please checkout your current cart or empty your cart and try again' , 'error'); 
     return false; 
    } 

更改这个..你如果病情需要 '=='

+0

感谢ashvek。当然,你是对的,但这并没有完全解决我的问题。 随着您的更改,我现在不能将任何产品添加到包含油漆的购物车,甚至是另一种油漆产品,并且我可以将任何产品(包括油漆产品)添加到包含其他类别的购物车。 有没有其他想法? 非常感谢您的帮助 –

相关问题