0
votes

I am trying to Disable shopping if a an item from a specific product category is in cart (which is a subscription in form of product with tabs - checkout and shipping are stripped off). When that product is added to cart, no other products should be allowed to be add up.

I have tried those threads code:

But didn't helped.

How can I disable shopping if a specific product category is in cart on Woocommerce?

output problem image

1
That is the text of your initial question: Disable shopping if specific category in cart woocommerce "i am trying to Disable shopping if a category is in the cart which is a subscription in form of product with tabs,checkout shipping stripped off.Once that category hidden which skips to checkout page is added to cart no other products should be allowed to add up.i took few references but didnt helped."LoicTheAztec
yes i am looking for the same which is unresolved by solution given.thanks.Image attached shows shopping not disabled.Amit Sharma
When you ask something you just need to be clear. If you ask for chicken, you will not get beef even if both are meat…LoicTheAztec
My answer is answering your initial question. So you should better make a new question, taking care with what you are asking, paying attention to the words and sentences to make it clear and understandable.LoicTheAztec
"When that product is added to cart, no other products should be allowed to be add up. " is mentioned above regardsAmit Sharma

1 Answers

3
votes

October 2018 - Improved updated code version:
Disable other product categories for a cart item from specific category in Woocommerce

Try the following code, that will:

  1. Avoid add to cart when a product from a specific product category is in cart
  2. Remove other cart items when a product from a specific product category is added to cart

The code:

// Remove other items when our specific product is added to cart
add_action( 'woocommerce_add_to_cart', 'remove_other_products_on_add_to_cart', 10, 6 );
function remove_other_products_on_add_to_cart ( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ){
    // HERE set your product category (can be term IDs, slugs or names)
    $category = 'posters';

    // We remove other items when our specific product is added to cart
    if( has_term( $category, 'product_cat', $product_id ) ) {
        foreach( WC()->cart->get_cart() as $item_key => $cart_item ){
            if( ! has_term( $category, 'product_cat', $cart_item['product_id'] ) ) {
                WC()->cart->remove_cart_item( $item_key );
            }
        }
    }
}

// Avoid other items to be added to cart when our specific product is in cart
add_filter( 'woocommerce_add_to_cart_validation', 'check_and_limit_cart_items', 10, 3 );
function check_and_limit_cart_items ( $passed, $product_id, $quantity ){
    // HERE set your product category (can be term IDs, slugs or names)
    $category = 'posters';

    // We exit if the cart is empty
    if( WC()->cart->is_empty() )
        return $passed;

    // CHECK CART ITEMS: search for items from product category
    foreach ( WC()->cart->get_cart() as $cart_item ){
        if( has_term( $category, 'product_cat', $cart_item['product_id'] ) ) {
            // Display an warning message
            wc_add_notice( __('A subscription is already in cart (Other items are not allowed in cart).', 'woocommerce' ), 'error' );
            // Avoid add to cart
            return false;
        }
    }
    return $passed;
}

Code goes in function.php file of your active child theme (or active theme). Tested and works.