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:
- Disable Woocommerce add to cart button if the product is already in cart
- Prevent checkout for cart with specific category
But didn’t helped.
How can I disable shopping if a specific product category is in cart on Woocommerce?
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:
- Avoid add to cart when a product from a specific product category is in cart
- 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.