web-dev-qa-db-fra.com

Panier filtre Woocommerce et quantité spécifique à la catégorie

Donc, fondamentalement, j'essaie de filtrer mon panier. J'aimerais que le message ci-dessous s'affiche si le nombre de produits de la catégorie "Cuvées" est 4,5,7,8,8,9,10,11,13,14,15,16,17,19,21 dans le panier .

Jusqu'ici voici ce que j'ai fait mais cela ne fonctionne que pour une valeur: 7. Dois-je mettre un tableau lorsque je déclare la fonction?

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&#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>',
                            $cart_product_total,
                            $total_quantity ),
                        'error' );
                    }
                    $i++;
                endif;
            endforeach;
        }
    }        

Je vous remercie :)

2
nmnmnm

Je ne suis pas sûr de savoir comment le message d'erreur est affiché pour un nombre quelconque, car dans la majeure partie du script, vous utilisez la structure alternative pour les instructions if et les instructions foreach (en utilisant : au lieu de {}), puis au fond, vous mélangez une fonction if(){} à l'intérieur un if : endif qui n'est pas autorisé, voir ici pour plus d'informations:

http://php.net/manual/en/control-structures.alternative-syntax.php

J'ai un peu restructuré votre code mais je ne peux pas le tester, alors essayez ceci:

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;

        $total_quantity = 0;
        $display_notice = 1;
        $i = 0;
        //loop through all cart products
        foreach ( $woocommerce->cart->cart_contents as $product ) {

            // See if any product is from the cuvees category or not
            if ( has_term( 'cuvees', 'product_cat', $product['product_id'] )) {
                $total_quantity += $product['quantity'];
            }

        }
        // Set up the acceptable totals and loop through them so we don't have an ugly if statement below.
        $acceptable_totals = array(1, 2, 3, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 72, 96, 120);

        foreach($acceptable_totals as $total_check) {
            if ( $total_check == $total_quantity ) { $display_notice = 0; } 
        }

        foreach ( $woocommerce->cart->cart_contents as $product ) {
            if ( has_term( 'cuvees', 'product_cat', $product['product_id'] ) ) {
                if( $display_notice == 1 && $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 %d 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++;
            }
        }
    }
}

EDIT - Petite erreur dans la logique d'affichage.

EDIT2 - Code mis à jour pour retourner le nombre actuel de produits dans un message d'erreur.

0
Jason Murray