I have updated WooCommerce to version 3.0+ and this custom function is not working anymore as before. Even if my cart is empty I get the error message as if there was something from another category already in my cart.

Here is the code I am using:

function is_product_the_same_cat($valid, $product_id, $quantity) {
    global $woocommerce;
    // start of the loop that fetches the cart items
    foreach ( $woocommerce->cart->get_cart() as $cart_item_key => $values ) {
        $_product = $values['data'];
        $terms = get_the_terms( $_product->id, 'product_cat' );
        $target_terms = get_the_terms( $product_id, 'product_cat' ); //get the current items
        foreach ($terms as $term) {
            $cat_ids[] = $term->term_id;  //get all the item categories in the cart
        foreach ($target_terms as $term) {
            $target_cat_ids[] = $term->term_id; //get all the categories of the product
    $same_cat = array_intersect($cat_ids, $target_cat_ids); //check if they have the same category
    if(count($same_cat) > 0) return $valid;
    else {
        wc_add_notice( 'This product is in another category!', 'error' );
        return false;
add_filter( 'woocommerce_add_to_cart_validation', 'is_product_the_same_cat',10,3);

How to make it work for WooCommerce version 3.0+, any idea?


Read more here: Limit purchase to 1 product category at the time in WooCommerce 3.0+


If you know the solution of this issue, please leave us a reply in Comment section, to update the question.

Wordpress related questions and answers: