WooCommerce Filterwagen und kategoriespezifische Menge

Im Grunde versuche ich meinen Einkaufswagen zu filtern. Ich möchte die folgende Nachricht anzeigen, wenn Produkte aus der Kategorie “Cuvées” die Nummer 4,5,7,8,9,10,11,13,14,15,16,17,19,21 im Warenkorb haben .

Soweit hier, was ich gemacht habe, aber es funktioniert nur für einen Wert: 7. Muss ich ein Array setzen, wenn ich die function deklariere?

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( '
/!\  Une commande de %s bouteilles n'est pas possible !   /!\


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.

', $cart_product_total, $total_quantity ), 'error' ); } $i++; endif; endforeach; } }

Vielen Dank 🙂

Solutions Collecting From Web of "WooCommerce Filterwagen und kategoriespezifische Menge"

Ich bin mir nicht sicher, wie die Fehlermeldung für eine beliebige Zahl angezeigt wird, da im gesamten Skript die alternative Struktur für if statementen und foreach statementen verwendet wird (mit : statt {} ), dann unten ein if(){} in einem if : endif das nicht erlaubt ist, siehe hier für weitere Informationen:

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

Ich habe Ihren Code ein wenig umstrukturiert, kann ihn aber nicht testen. Probieren Sie es aus:

 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( '
/!\  Une commande de %d bouteilles n'est pas possible !   /!\


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.

', $total_quantity), 'error' ); } $i++; } } } }

EDIT – Kleiner Fehler in der Anzeigelogik.

EDIT2 – Aktualisierter Code, um die aktuelle Anzahl der Produkte in der Fehlermeldung zurückzugeben.