Skip to content
Advertisement

Disable shopping when an item from a specific product category is in cart in Woocommerce

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

Advertisement

Answer

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.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement