我试图阻止用户将特定类别中的多个项目添加到他们的购物车中。我找到了这个功能:
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的新手,我很确定我的代码中存在很多错误。
答案 0 :(得分: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');
}
}
}
}
}
}