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