WooCommerce Produkttabelle sortieren: Reihenfolge, Spalten, Verkäufe
Die Sortierung einer WooCommerce Produkttabelle besteht aus drei Teilen: der Reihenfolge, mit der die Tabelle startet, den Spaltenköpfen, die Besucher anklicken können, und einem optionalen Sortier-Dropdown. Jeder Teil wird an einer anderen Stelle eingestellt und liest seine Daten anders aus. Das erklärt die meisten Fragen zur „falschen Reihenfolge“: eine Taxonomie-Spalte ohne Sortierpfeile, eine berechnete Spalte, die sich nicht sortieren lässt, Bestseller, die nicht zu den tatsächlichen Verkäufen passen. Im Folgenden erfahren Sie, wie die einzelnen Teile in WOOT funktionieren, wie Sie nach eigenen Feldern sortieren und wie Sie die Spaltensortierung abschalten.
Drei Arten, eine WooCommerce Produkttabelle zu sortieren
Die Standardreihenfolge. Im Tab Optionen (Options) der Tabelle legt Standardsortierung nach (Default order by) das Feld fest, nach dem die Tabelle beim Laden sortiert ist, und Standardreihenfolge (Default order) die Richtung, asc oder desc. Neue Tabellen starten mit der ID in absteigender Reihenfolge. Der Shortcode kann beides mit den Attributen orderby und order überschreiben, und zwar mit den Feldschlüsseln der Spalten:
[woot id=12 orderby="menu_order" order="asc"]
[woot id=12 orderby="total_sales" order="desc"]
Weitere Schlüssel sind post_title, price, sku, stock_quantity, post_date und, für ein Feld aus dem Tab „Meta“ der Tabelle, dessen Meta-Schlüssel. Das Attribut heißt orderby, in einem Wort: order_by wird nicht erkannt und stillschweigend ignoriert. Beachten Sie bei Menüreihenfolge (Menu order) die Richtung: Die Menüreihenfolge läuft von niedrig nach hoch und braucht daher asc, während die Standardrichtung einer neuen Tabelle desc ist und die Liste damit auf den Kopf stellt.
Spaltenköpfe. Sortierbare Spalten zeigen im Kopf zwei kleine Pfeile. Ein Klick sortiert nach dieser Spalte, der nächste Klick kehrt die Richtung um, und die Tabelle springt zurück auf Seite eins.
Das Sortier-Dropdown. Aktivieren Sie in den Optionen Sortier-Dropdown anzeigen (Show Sorting Dropdown) und wählen Sie die Einträge unter Felder des Sortier-Dropdowns (Sorting Dropdown Fields) aus (zum Umordnen einen Eintrag gedrückt halten und warten). Die Liste enthält die bekannten WooCommerce-Sortierungen (Beliebtheit, durchschnittliche Bewertung, Neueste, Preis aufsteigend und absteigend) sowie Name, Artikelnummer, Lagerbestand, Gesamtverkäufe, Anzahl der Kommentare, Datum der letzten Änderung, Menüreihenfolge, Produkte im Angebot zuerst, Verfügbarkeit, zufällig und Produkt-ID. Jedes Feld aus dem Tab „Meta“ der Tabelle wird als Titel: Aufsteigend (Title: Ascending) und Titel: Absteigend (Title: Descending) hinzugefügt. Der erste Eintrag, Nach Tabelle sortiert (Sorted by table), kehrt zur Sortierung über die Spaltenköpfe zurück. Im Shortcode führen Sie die Schlüssel im Attribut orderby_select_fields auf, zum Beispiel orderby_select_fields="popularity,price,price-desc,date". Das Dropdown steht in Tabellen zur Verfügung, die ihre Zeilen per AJAX laden, dem Normalmodus von [woot].
Zwei Dropdown-Einträge haben keine eigene Richtung: Nach Neuheit sortieren (Sort by latest) und Nach Menüreihenfolge sortieren (Sort by menu order) verwenden die aktuelle Richtung der Tabelle. Ist Standardreihenfolge (Default order) auf desc gesetzt, zeigt „Neueste“ die neuesten Produkte zuerst, während „Menüreihenfolge“ rückwärts läuft. Fügen Sie deshalb nur den Eintrag hinzu, der zu Ihrer Standardrichtung passt.
Welche Spalten sich per Klick auf den Kopf sortieren lassen
Eine Spalte ist sortierbar, wenn ihre Daten ein Feld des Produkt-Beitrags oder ein einzelner Meta-Wert sind, den die Datenbank ordnen kann: ID, Titel, Status, Veröffentlichungsdatum, Änderungsdatum, Kommentaranzahl, Preis, regulärer Preis und Angebotspreis, Artikelnummer, Gewicht und Abmessungen, Lagerstatus, Lagerbestand, Gesamtverkäufe, Anzahl der Bewertungen, Bewertung, Menüreihenfolge sowie die Text- und Zahlenfelder des Tabs „Meta“. Der erste Klick verwendet die eigene Startrichtung der Spalte: ID, Datumsangaben, Kommentaranzahl und Zahlenfelder des Tabs „Meta“ beginnen beim höchsten Wert; Titel, Preise, Artikelnummer, Lagerbestand, Gesamtverkäufe, Bewertungen und Menüreihenfolge beginnen beim niedrigsten.
Taxonomie-Spalten (Kategorien, Schlagwörter, Attribute wie Länge oder Farbe) lassen sich nicht sortieren. Ein Produkt kann mehrere Begriffe in einer Taxonomie haben, und die Produktabfrage von WordPress kann Produkte nicht nach den Namen ihrer Begriffe ordnen. Auch Spalten, die per Code erzeugt werden, etwa das Vorschaubild, die Schaltfläche „In den Warenkorb“ oder ein in einem Filter geänderter Wert, sind nicht sortierbar, weil die Datenbank diesen Wert nicht enthält.
Bei variablen Produkten ist ein weiterer Hinweis nötig. WooCommerce speichert pro unterschiedlichem Variationspreis einen eigenen _price-Wert, daher ist bei der Sortierung über den Spaltenkopf Preis (Price) nicht garantiert, dass ein variables Produkt bei seinem niedrigsten Preis einsortiert wird. Bieten Sie in Shops mit variablen Produkten im Sortier-Dropdown Nach Preis sortieren: aufsteigend (Sort by price: low to high) und Nach Preis sortieren: absteigend (Sort by price: high to low) an: Diese verwenden den niedrigsten beziehungsweise höchsten Preis, den WooCommerce selbst für jedes Produkt ermittelt.
Nach einem benutzerdefinierten Feld oder einem berechneten Wert sortieren
Um nach einem beliebigen benutzerdefinierten Feld zu sortieren, fügen Sie es im Tab Meta mit dem exakten Meta-Schlüssel und dem Typ Text (text) (alphabetisch) oder Zahl (number) (numerisch) hinzu und nehmen es dann als Spalte auf. Bei der Sortierung nach einem Meta-Schlüssel werden nur Produkte angezeigt, die für diesen Schlüssel einen Wert haben. So baut WordPress die Abfrage auf; diese FAQ zeigt, wie Sie die übrigen einbeziehen.
Ein Wert, den Sie im Hook woot_meta_data_cell berechnen, dient nur der Anzeige: Der Hook ändert den Text der Zelle, nachdem die Produkte geladen wurden. Die Sortierung verwendet also weiterhin das, was unter diesem Meta-Schlüssel gespeichert ist, und wo nichts gespeichert ist, lässt sich nichts sortieren. Die Lösung besteht darin, den berechneten Wert als echtes Produkt-Meta zu speichern und danach zu sortieren. Beispiel: ein Lagerwert (Preis × Lagerbestand), der beim Speichern eines Produkts und bei einer Bestandsänderung nach einer Bestellung aktualisiert wird.
/*
* Store "stock value" (price x stock quantity) as product meta _stock_value,
* so a WOOT Meta field with this key and the type "number" can be sorted.
* Child theme functions.php or a code snippets plugin.
*/
function my_store_stock_value($product) {
if (!is_a($product, 'WC_Product')) {
$product = wc_get_product($product);
}
if (!$product) {
return;
}
$value = (float) $product->get_price() * (int) $product->get_stock_quantity();
update_post_meta($product->get_id(), '_stock_value', round($value, 2));
}
add_action('woocommerce_new_product', 'my_store_stock_value');
add_action('woocommerce_update_product', 'my_store_stock_value');
add_action('woocommerce_product_set_stock', 'my_store_stock_value');
Bereits vorhandene Produkte erhalten den Wert beim nächsten Speichern. Um ihn für alle auf einmal zu füllen, markieren Sie sie unter „Produkte“, wählen bei Mehrfachaktionen (Bulk actions) die Aktion Bearbeiten (Edit), klicken auf Anwenden (Apply) und dann auf Aktualisieren (Update), ohne ein Feld zu ändern. Nach demselben Prinzip machen Sie eine Taxonomie sortierbar: Lesen Sie in der Funktion den Begriff mit wp_get_post_terms() aus und speichern Sie seinen Namen oder seine Nummer in einem Meta-Schlüssel.
Gesamtverkäufe und Beliebtheit: dieselbe Zahl aus zwei Quellen
Die Spalte Gesamtverkäufe (Total sales), Standardsortierung nach (Default order by) → Gesamtverkäufe (Total sales) und die Dropdown-Einträge Gesamtverkäufe: Aufsteigend/Absteigend (Total Sales: Ascending/Descending) sortieren nach dem Produkt-Meta-Feld total_sales (die Dropdown-Einträge lassen außerdem gruppierte und externe Produkte aus). Nach Beliebtheit sortieren (Sort by popularity) nutzt die Produkt-Lookup-Tabelle von WooCommerce, dieselbe Sortierung wie die Shopseite: total_sales von hoch nach niedrig, danach neuere Produkt-IDs zuerst. Normalerweise enthalten beide dieselbe Zahl.
WooCommerce erhöht total_sales, wenn eine Bestellung den Status In Bearbeitung (Processing), Wartend (On hold) oder Abgeschlossen (Completed) erreicht. Importierter Verkaufsverlauf oder Bestellungen, die ohne diese Statuswechsel angelegt wurden, gelangen nie in dieses Feld, sodass die „Bestseller“ nur die seither getätigten Verkäufe widerspiegeln. Um nach dem vollständigen Verlauf zu sortieren, schreiben Sie die Summen in total_sales (die meisten Import-Tools können dieses Feld zuordnen) und führen dann WooCommerce → Status → Werkzeuge → Produkt-Lookup-Tabellen (Product lookup tables) → Neu generieren (Regenerate) aus, damit die Beliebtheit dieselben Zahlen verwendet. Für eine feste Bestseller-Tabelle lesen Sie Tabellen mit meistverkauften Produkten.
Die Spaltensortierung abschalten
Bei einer unter WOOT → Tabellen erstellten Tabelle wählen Sie im Tab „Optionen“ unter Sortierung für Spalten deaktivieren (Disable columns order-by) die gewünschten Spalten aus. Deren Pfeile verschwinden, und die Köpfe sind nicht mehr anklickbar; die Standardreihenfolge gilt weiterhin.
Die Shortcodes [woot_upsells], [woot_cross_sells], [woot_related], [woot_grouped] und [woot_variations] sind nicht an eine Tabelle gebunden, daher haben sie weder eine solche Option noch ein Attribut dafür. Dieser Code schaltet die Sortierung über die Spaltenköpfe nur in diesen Tabellen ab:
/*
* WOOT: no header sorting in the upsells, cross-sells, related,
* grouped and variations tables. Other tables keep their sorting.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('woot_profile_extend', function ($profile, $action, $shortcode_args = []) {
$no_sorting = ['woot_upsells', 'woot_cross_sells', 'woot_related', 'woot_grouped', 'woot_variations'];
if (isset($shortcode_args['filter_provider']) && in_array($shortcode_args['filter_provider'], $no_sorting, true)) {
foreach ($profile as $key => $field) {
if (is_array($field) && !empty($field['order'])) {
$profile[$key]['order'] = false;
}
}
}
return $profile;
}, 10, 3);
Entfernen Sie aus der Liste $no_sorting die Shortcodes, die sortierbar bleiben sollen. Außerdem wiederholt die Tabelle die Spaltentitel in einer Fußzeile. Dafür gibt es keine Option; blenden Sie sie mit CSS aus. Im Tab Eigenes CSS (Custom CSS) der Tabelle (das Plugin beschränkt die Regeln auf diese Tabelle):
table tfoot { display: none; }
Für alle Tabellen der Website tragen Sie stattdessen Folgendes unter Design → Anpassen → Zusätzliches CSS ein:
.woot-data-table table tfoot { display: none; }
Upsell-, Cross-Sell- und Verwandte-Produkte-Tabellen sortieren
Diese Shortcodes sortieren nach dem Produkttitel von A bis Z, sofern Sie orderby und order nicht festlegen:
[woot_upsells columns="thumbnail,sku,title,price" orderby="menu_order"]
[woot_upsells columns="thumbnail,sku,title,price" orderby="post__in"]
menu_order verwendet die Menüreihenfolge der Produkte (per Drag-and-drop in der Ansicht Sortieren (Sorting) der Produktliste oder im Feld Menüreihenfolge (Menu order) im Tab „Erweitert“ des Produkts). post__in behält die Reihenfolge bei, in der die Produkte im Feld Upsells oder Cross-Sells des Produkts oder als untergeordnete Produkte eines gruppierten Produkts gespeichert sind. Verwandte Produkte wählt WooCommerce zufällig aus, daher verwenden Sie für sie ein Feld: orderby="menu_order" oder orderby="total_sales" order="desc" für Bestseller zuerst (die Richtung dieser Tabellen ist asc, sofern Sie nichts anderes festlegen). Diese Tabellen laden alle ihre Zeilen auf einmal, und ein Klick auf den Kopf sortiert die geladenen Zeilen im Browser nach dem Inhalt der Zellen neu. Das funktioniert bei einfachen Werten wie Artikelnummer oder Lagerbestand, aber Preise und verlinkte Titel werden als Text verglichen. Das ist ein weiterer Grund, die Sortierung über die Spaltenköpfe in diesen Tabellen mit dem obigen Code abzuschalten.
Die Shortcodes ermitteln das Produkt anhand der Seite, auf der sie stehen. Werden sie anderswo verwendet (auf einer normalen Seite, in einem per Code erzeugten Tab, in einem von einem anderen Plugin erzeugten PDF), geben sie WOOT: Set product id please in the shortcode attribute! aus. Übergeben Sie die Produkt-ID: [woot_upsells id=123]. Die Seite [woot_upsells] listet die weiteren Attribute auf.
Wenn die Reihenfolge weiterhin falsch aussieht
- Prüfen Sie den Shortcode: Ein Attribut
orderbyoderorderüberschreibt die Optionen der Tabelle. - Prüfen Sie die Richtung: Standardreihenfolge (Default order) gilt für jedes Feld, auch für die Menüreihenfolge.
- Vergewissern Sie sich bei einem Meta-Feld, dass die Produkte einen Wert unter genau diesem Schlüssel haben; Produkte ohne Wert werden bei der Sortierung danach nicht angezeigt.
- Vergleichen Sie bei Bestsellern den Wert
total_saleszweier Produkte mit ihren tatsächlichen Verkäufen und generieren Sie nach der Korrektur die Produkt-Lookup-Tabellen neu. - Leeren Sie nach Änderungen an den Optionen den Seitencache und laden Sie die Seite anschließend ausgeloggt neu.
Wenn eine Spalte weiterhin in einer Reihenfolge sortiert, die Sie sich nicht erklären können, eröffnen Sie im WOOT-Support-Forum ein Thema mit dem Shortcode der Tabelle, der Spalte und zwei Produkten, die in der falschen Reihenfolge erscheinen.