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;">/!\ Une commande de %s bouteilles n'est pas possible ! /!\ </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;
}
}
Je vous remercie :)
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;">/!\ Une commande de %d bouteilles n'est pas possible ! /!\ </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>', $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.