Woocommerce filter cart and category specific quantity

So basically, I’m trying to filter my cart.
I would like the message below displayed if products from the “cuvees” category are at the number of 4,5,7,8,9,10,11,13,14,15,16,17,19,21 in the cart.

So far here what I’ve did but it only works for one value : 7 .
Do I need to put an array when I declare the function ?

Read More
add_action( 'woocommerce_check_cart_items', 'check_total' );
    function check_total() {
        // Only run in the Cart or Checkout pages
        if( is_cart() || is_checkout() ) {

            global $woocommerce, $product;
            $i=0;
            //$prod_id_array = array();
            //loop through all cart products
            foreach ( $woocommerce->cart->cart_contents as $product ) :


                // Set checking if there's y products in cuvees cart total
                $cart_product_total = 4;



                // See if any product is from the cuvees category or not
                if ( has_term( 'cuvees', 'product_cat', $product['product_id'] ) ) :

                    $total_quantity += $product['quantity'];
                    //array_push($prod_id_array, $product['product_id']);
                endif;

            endforeach;

            foreach ( $woocommerce->cart->cart_contents as $product ) :
                if ( has_term( 'cuvees', 'product_cat', $product['product_id'] ) ) :
                    if( $total_quantity == $cart_product_total && $i == 0 ) {
                        // Display our error message
                        wc_add_notice( sprintf( '<h5 style="letter-spacing:0.5px;color:white;text-align:center;">/!&nbsp;    Une commande de %s bouteilles n'est pas possible&nbsp;! &nbsp;   /! </h5><br /> <br /><p style="text-align:center;"> L'envoi n'est possible que pour 1 | 2 | 3 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60  | 72 | 96 | 120 et plus bouteilles.</p>',
                            $cart_product_total,
                            $total_quantity ),
                        'error' );
                    }
                    $i++;
                endif;
            endforeach;
        }
    }        

Thanks guys!

Related posts

Leave a Reply

1 comment

  1. I’m going to take a stab in the dark here (I’m still not 100% sure of the requirements, but it appears that you need an array). Try the code below:

    add_action( 'woocommerce_check_cart_items', 'check_total' );
        function check_total() {
            // Only run in the Cart or Checkout pages
            if( is_cart() || is_checkout() ) {
    
                global $woocommerce, $product;
                $i=0;
                //$prod_id_array = array();
                //loop through all cart products
                foreach ( $woocommerce->cart->cart_contents as $product ) :
    
    
                    // Set checking if there's y products in cuvees cart total
                    $cart_product_total = array(4,5,7,8,9,10,11,13,14,15,16,17,19,21);
    
    
    
                    // See if any product is from the cuvees category or not
                    if ( has_term( 'cuvees', 'product_cat', $product['product_id'] ) ) :
    
                        $total_quantity += $product['quantity'];
                        //array_push($prod_id_array, $product['product_id']);
                    endif;
    
                endforeach;
    
                foreach ( $woocommerce->cart->cart_contents as $product ) :
                    if ( has_term( 'cuvees', 'product_cat', $product['product_id'] ) ) :
                        if( in_array($total_quantity, $cart_product_total) && $i == 0 ) {
                            // Display our error message
                            wc_add_notice( sprintf( '<h5 style="letter-spacing:0.5px;color:white;text-align:center;">/!&nbsp;    Une commande de %s bouteilles n&#39;est pas possible&nbsp;! &nbsp;   /! </h5><br /> <br /><p style="text-align:center;"> L&#39;envoi n&#39;est possible que pour 1 | 2 | 3 | 6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 | 54 | 60  | 72 | 96 | 120 et plus bouteilles.</p>',
                                $total_quantity ),
                            'error' );
                        }
                        $i++;
                    endif;
                endforeach;
            }
        }
    

    If this still doesn’t answer your question, please clarify what “are at the number of 4,5,7,8,9,10,11,13,14,15,16,17,19,21 in the cart.” means in the original question, and I can better help you out.