Die Reihenfolge der Produkte im Warenkorb ist in WooCommerce von Haus aus eher zufällig. Technisch gesehen spielt sie keine Rolle. Wenn aber z.B. SKUs (Produktnummern) mit angezeigt werden, ist eine "zufällige" Reihenfolge der Produkte im Warenkorb zumindest optisch nicht schön. Außerdem übernimmt z.B. auch das Plugin Germanized diese Produkt-Reihenfolge für die Darstellung auf der Rechnung.
Reihenfolge von Produkten im WooCommerce-Warenkorb ändern
Glücklicherweise lässt sich die Reihenfolge vergleichsweise einfach anpassen - und zwar entweder mit Plugins - oder mit wenigen Zeilen Programmiercode.
Warenkorb-Produkt-Sortierung mit Plugin ändern
Es gibt einige Plugins, die auf diesen Fall zugeschnitten sind. Auf der WooCommerce-Webseite selbst findet sich z.B. "Cart Sorting für WooCommerce". Wer sich $49 sparen will, kann auch das Plugin "Sort Products in Cart & Order Lite for WooCommerce" ansehen.
Ich selbst habe keine Erfahrung mit den o.g. Plugins, sondern setze für einfache Änderungen fast immer eigene Mini-Plugins ein. Mehr dazu im nächsten Absatz.
Für bessere Performance, Wartbarkeit und Spezialfälle: Warenkorb-Produkt-Sortierung mit Code ändern
Jedes Plugin benötigt Server-Leistung und verlangsamt deine Webshop-Installation. Außerdem schwankt die Code-Qualität stark - viele Plugins werden nur eine beschränkte Zeit gewartet.
Die Produkt-Reihenfolge im Warenkorb lässt sich mit einem einfachen Code-Schnipsel anpassen - vielen Dank an dieser Stellen an Stackoverflow. Den Code kannst du entweder in ein eigenes Mini-Plugin einbauen, in die functions.php-Datei eines eigenen Child Themes oder z.B. mittels eines Plugins wie "Advanced Scripts". Ich empfehle eine der ersten beiden Möglichkeiten.
add_action( 'woocommerce_cart_loaded_from_session', function() {
// Vorbereitung: Wir erstellen ein eigenes Array, das wir für die Sortierung nutzen
foreach ( WC()->cart->cart_contents as $key => $item ) {
$product = wc_get_product( $item['product_id'] );
// Produkteigenschaft, nach der Sortiert werden soll - näheres weiter unten im Beitrag
$products_in_cart[ $key ] = $product->get_sku();
}
// Jetzt wird mittels einer Sortierfunktion sortiert
asort( $products_in_cart ); // Von niedrig nach hoch (0 -> 9, A -> Z)
// arsort( $products_in_cart ); // Von hoch zu niedrig (9 -> 0, Z -> A)
// Jetzt bauen wir das ursprüngliche Array (Feld) wieder im richtigen Format "zurück"
$cart_contents = array();
foreach ( $products_in_cart as $cart_key => $price ) {
$cart_contents[ $cart_key ] = WC()->cart->cart_contents[ $cart_key ];
}
WC()->cart->cart_contents = $cart_contents;
} );
Sortier-Möglichkeiten: Nach Produktname, nach SKU, nach Produktpreis,...
Um z.B. nach Namen zu sortieren, musst du einfach nur diese Zeile:
$products_in_cart[ $key ] = $product->get_sku();
mit der folgenden ersetzen:
$products_in_cart[ $key ] = $product->get_name();
Eine sehr gute Referenz für die verschiedenen Funktionen des $product-Objekts bietet Rodolfo Melogli auf seiner englischsprachigen Webseite.
Die Möglichkeiten zur Sortierung sind fast unbegrenzt. Du musst einfach nur das $cart_contents-Array wieder in der richtigen Form "zurückbauen". So könntest du z.B. auch in einzelne "Kategorien" sortieren.
Quellen/Weitere Informationen
Diese Stackoverflow-Beiträge helfen dir möglicherweise auch weiter:
https://stackoverflow.com/questions/71530086/sort-products-in-cart-by-category-and-also-apply-this-sorting-method-on-orders-p
https://stackoverflow.com/questions/42839671/change-order-of-cart-in-woocommerce