WooCommerce: Produkt-Reihenfolge im Warenkorb ändern (und auf Rechnungen)

19. Dezember 2022 von Michael Nissen · 

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/17194899/woocommerce-cart-page-display-products-order-by-product-price/57136404#57136404

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

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Sie haben Fragen oder möchten ein Angebot anfordern?

Jetzt Kontakt aufnehmen
crosslist