WooCommerce Filter: Nur Attribute der aktuellen Kategorie anzeigen
Wenn sich mehrere Produktkategorien ein Attribut teilen, bietet ein WooCommerce-Filter auf der Seite oft Werte an, die dort keinen Sinn ergeben: Grill bei Kühlschränken, 512 GB bei Kopfhörern, Marken, die in dieser Kategorie gar nicht verkauft werden. Ein Klick darauf liefert ein leeres Ergebnis. Damit der WooCommerce Filter nur Attribute der aktuellen Kategorie anzeigt, zählt HUSKY die Produkte hinter jedem Begriff auf der Seite und blendet die Begriffe aus, deren Anzahl null ist. Im Folgenden sehen Sie, wie das funktioniert, die genauen Einstellungen, wie Sie die Zahlen unsichtbar halten, und die Fälle, in denen die Kategorie überhaupt nicht bekannt ist.
Woher der Filter weiß, was zur aktuellen Kategorie gehört
Auf einer Produktkategorie-Seite und auf jedem anderen Archiv einer Produkttaxonomie (einem Schlagwort, einem Attribut-Archiv, einer Marke) merkt sich HUSKY den Begriff, den die Seite gerade anzeigt. Bei eingeschalteter Dynamischen Nachzählung (Dynamic recount) wird die Zahl neben jedem Filterbegriff so berechnet: Produkte dieser Kategorie, die allem entsprechen, was der Besucher bereits ausgewählt hat, und zusätzlich diesen Begriff haben. Ein Wert, den kein Produkt der Kategorie hat, erhält 0.
Leere Begriffe ausblenden (Hide empty terms) entfernt dann jeden Begriff mit 0 aus dem Formular. Wenn alle Begriffe eines Abschnitts entfernt sind, verschwindet auch der gesamte Abschnitt samt Titel, sodass ein Attribut, das in der Kategorie nicht verwendet wird, aus der Seitenleiste verschwindet. Der Kategorie-Abschnitt selbst wird auf die Unterkategorien der angezeigten Kategorie gekürzt; warum der Filter nur Unterkategorien anzeigt erklärt diesen Teil und seine Ausnahmen.
Pro Kategorie muss nichts konfiguriert werden. Dasselbe Formular, in einer Seitenleiste oder im Kategorie-Template platziert, passt sich jeder Kategorieseite von selbst an.
Die drei Einstellungen, die leere Begriffe ausblenden
Öffnen Sie die Plugin-Einstellungen, Tab Optionen (Options), und setzen Sie:
- Anzahl anzeigen (Show count): Ja
- Dynamische Nachzählung (Dynamic recount): Ja
- Leere Begriffe ausblenden (Hide empty terms): Ja
Speichern Sie, und leeren Sie dann alle Caches, die alte Zahlen enthalten können: Cachen Sie die dynamische Nachzählungsnummer für jedes Element im Filter (Cache dynamic recount number for each item in filter) und Cache-Begriffe (Cache terms) unter Erweitert → Optionen (Advanced → Options), falls Sie sie verwenden, sowie den Seiten-Cache Ihrer Website.
Die drei Optionen hängen voneinander ab, und die Einstellungsseite erzwingt das: Ein leerer Begriff lässt sich nur durch Zählen finden. Wenn Sie Leere Begriffe ausblenden (Hide empty terms) einschalten, werden auch die beiden anderen eingeschaltet, und wenn Sie Anzahl anzeigen (Show count) ausschalten, werden auch die beiden anderen ausgeschaltet. Wenn Sie Anzahl anzeigen (Show count) auf Nein setzen, um die Zahlen loszuwerden, kehren leere Begriffe auf jeder Seite zurück. Die möglichen Kombinationen:
| Anzahl anzeigen / Dynamische Nachzählung / Leere Begriffe ausblenden | Was Besucher sehen |
|---|---|
| Nein / Nein / Nein | Alle Begriffe, keine Zahlen |
| Ja / Nein / Nein | Zahlen für den gesamten Shop; Begriffe ohne jedes Produkt sind ausgegraut |
| Ja / Ja / Nein | Zahlen für die aktuelle Kategorie und Auswahl; Begriffe mit null bleiben sichtbar, sind aber ausgegraut und nicht auswählbar |
| Ja / Ja / Ja | Begriffe mit null werden ausgeblendet; leere Abschnitte verschwinden |
Die dritte Zeile ist die richtige Wahl, wenn Sie nicht verfügbare Werte lieber inaktiv anzeigen, als sie zu entfernen. Einige weitere Stellen können die globalen Optionen überschreiben:
- In der kostenlosen Version sind Leere Begriffe ausblenden (Hide empty terms) und Text der Begriffszählung ausblenden (Hide terms count text) (siehe unten) ausgegraut; sie gehören zur Premium-Version.
- Das HUSKY-Filter-Widget hat ein eigenes Feld Dynamische Nachzählung (Dynamic recount) (Standard (Default), Nein (No), Ja (Yes)). Steht es auf Nein (No), ignoriert dieses Widget die globale Einstellung. Der Shortcode [woof] hat denselben Schalter als
dynamic_recount=1oderdynamic_recount=0. - Wenn der Turbo-Modus aktiviert ist, zeigt der Tab Optionen (Options) separate Kopien dieser drei Einstellungen für den Turbo-Modus. Stellen Sie sie nach dem Aktivieren erneut ein.
- Eine Taxonomie, die als Bereichsregler dargestellt wird, wird von den globalen Optionen nicht nachgezählt. Öffnen Sie ihre zusätzlichen Optionen (das Zahnrad-Symbol neben der Taxonomie im Tab Struktur (Structure)) und setzen Sie Dynamische Nachzählung aktivieren (Enable dynamic recount) auf Ja; Werte ohne Produkte werden dann aus der Skala des Reglers weggelassen.
Die Dokumentation zum Tab Optionen beschreibt die übrigen Einstellungen auf demselben Bildschirm.
Leere Begriffe ausblenden, ohne die Anzahl zu zeigen
Der häufigste Wunsch ist, leere Begriffe auszublenden, ohne Zahlen wie (12) auszugeben. Lassen Sie alle drei Optionen eingeschaltet und gehen Sie zu Erweitert → Optionen (Advanced → Options): Setzen Sie Text der Begriffszählung ausblenden (Hide terms count text) auf Ja. Das Plugin berechnet die Zahlen weiterhin, denn es braucht sie, um zu wissen, was leer ist, gibt sie aber nicht aus. Um dies nur für ein Formular zu tun, fügen Sie seinem Shortcode hide_terms_count=1 hinzu, zum Beispiel [woof hide_terms_count=1].
Den Zähler per CSS auszublenden funktioniert ebenfalls bei Checkboxen und Radiobuttons (.woof_checkbox_count, .woof_radio_count), nicht aber bei Dropdown-Listen: Dort ist die Zahl Teil des Optionstexts und hat kein eigenes Element. Die Einstellung deckt jeden Filtertyp ab.
Um den Zähler nur in einigen Abschnitten zu ändern, verwenden Sie den Hook woof_term_count_format. Er erhält das Format, standardmäßig (%d), und den Taxonomie-Slug:
/*
* HUSKY: counter format per filter section.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('woof_term_count_format', function ($format, $tax_slug) {
// no numbers at all in the Tags and Brand sections
if (in_array($tax_slug, array('product_tag', 'pa_brand'), true)) {
return '';
}
// "12" instead of "(12)" everywhere else
return '%d';
}, 10, 2);
Leere Begriffe werden in diesen Abschnitten weiterhin ausgeblendet, weil das Ausblenden von der berechneten Anzahl abhängt, nicht vom ausgegebenen Text. Um Zahlen nur auf der untersten Ebene eines Kategoriebaums anzuzeigen, blenden Sie die Zähler von Begriffen mit Unterbegriffen per CSS aus (Feld für benutzerdefiniertes CSS Ihres Themes):
.woof_childs_list_li > .woof_checkbox_label > .woof_checkbox_count {
display: none;
}
Ein ausgewählter Begriff zeigt nie eine Zahl. Das ist Absicht: Die Nachzählung überspringt Begriffe, die bereits Teil der Suche sind.
Warum nach der ersten Auswahl andere Werte verschwinden
Die dynamische Nachzählung grenzt das Formular mit jeder Auswahl weiter ein: Nachdem Marke: Bosch ausgewählt wurde, bleiben nur die Farben übrig, die Bosch-Produkte in dieser Kategorie haben. Das ist der Sinn der Funktion. Sie lässt sich nicht nur für einen Abschnitt abschalten.
Ein anderer Fall liegt vor, wenn die Auswahl einer Farbe alle anderen Farben ausblendet. Das kommt von der Logik des Abschnitts. Öffnen Sie die zusätzlichen Optionen der Taxonomie (das Zahnrad-Symbol im Tab Struktur (Structure)) und sehen Sie sich Logik der Filterung (Logic of filtering) an:
- ODER (OR) (Standard): Produkte, die mindestens einen der ausgewählten Werte haben. Jede andere Farbe wird für sich gezählt (innerhalb der Auswahl in den anderen Abschnitten), sodass die Farben, die es in der Kategorie gibt, erhalten bleiben.
- UND (AND): Produkte, die alle ausgewählten Werte gleichzeitig haben. Die Anzahl jeder anderen Farbe wird zu „Produkte, die gleichzeitig rot und blau sind", in der Regel 0, sodass sie mit Leere Begriffe ausblenden (Hide empty terms) verschwinden.
- NICHT IN (NOT IN): schließt Produkte mit den ausgewählten Werten aus.
Für Farben, Größen und die meisten Attribute, bei denen ein Besucher „dies oder das" möchte, ist ODER die richtige Logik. Verwenden Sie UND für Merkmale, die alle vorhanden sein müssen, etwa „WLAN und Bluetooth".
Für Optionen, die eingrenzen, bevor Produkte geladen werden (ein Finder aus abhängigen Dropdown-Listen), verwenden Sie [woof ajax_redraw=1 autosubmit=1]: Jede Änderung zeichnet nur das Formular mit neu gezählten Optionen neu, und die Filter-Schaltfläche lädt die Produkte. ajax_redraw ist nicht für den AJAX-Modus gedacht; lassen Sie Versuchen Sie AJAX im Shop (Try to ajaxify the shop) für dieses Formular daher ausgeschaltet.
Shop-Seite, eigene Seiten und Page Builder
Die automatische Eingrenzung braucht ein Taxonomie-Archiv. An anderer Stelle gibt es keine aktuelle Kategorie:
- Die Haupt-Shop-Seite zeigt den gesamten Katalog, sodass, bis der Besucher etwas auswählt, nur Werte ausgeblendet werden, die im ganzen Shop kein Produkt haben. Das ist korrektes Verhalten.
- Eine WordPress-Seite (eine Startseite, eine Landingpage, eine mit Elementor oder Divi gebaute Seite, die eine Kategorie auflistet) ist kein Kategorie-Archiv, auch wenn sie nur die Produkte dieser Kategorie zeigt. Der Filter kann das nicht wissen und listet alles auf.
Teilen Sie auf einer solchen Seite beiden Shortcodes mit, um welche Kategorie es auf der Seite geht. Verwenden Sie die Begriffs-ID aus Produkte → Kategorien (Products → Categories):
[woof taxonomies=product_cat:15]
[woof_products taxonomies=product_cat:15 per_page=12]
Das Attribut taxonomies von [woof] bewirkt, dass Zahlen und Ausblenden dieser Kategorie folgen, und dasselbe Attribut in [woof_products] begrenzt die angezeigten Produkte. Mehrere IDs einer Taxonomie werden mit Kommas getrennt (product_cat:15,16, Produkte in einer von beiden), mehrere Taxonomien mit einem Pluszeichen (product_cat:15+pa_color:22). Es funktioniert nur, wenn die drei oben genannten Optionen eingeschaltet sind. Die vollständige Einrichtung solcher Seiten finden Sie unter Produktfilter auf eigener Seite oder Startseite.
Wenn Sie pro Kategorie einen anderen Satz von Abschnitten benötigen statt anderer Werte, lesen Sie verschiedene Filter pro Kategorie anzeigen.
Wenn sich der Filter auf einem echten Kategorie-Archiv trotzdem wie auf der Shop-Seite verhält, verbirgt das Archiv-Template des Themes möglicherweise die aktuelle Kategorie vor dem Plugin; das passiert meist bei blockbasierten Templates. Setzen Sie unter Erweitert → Optionen (Advanced → Options) die Option Zusätzliche Prüfung der Kategorieseite (Additional check of the category page) auf Ja.
Eine leichtere Variante ohne dynamische Nachzählung
Wenn Sie nur Begriffe ausblenden müssen, die nirgendwo im Shop Produkte haben (alte Größen, eine Marke, die Sie nicht mehr verkaufen), brauchen Sie keine dynamische Nachzählung. Dieses Snippet weist WordPress an, solche Begriffe zu überspringen, wenn HUSKY sie lädt:
/*
* HUSKY: do not list terms that have no published products at all.
* Child theme functions.php or a code snippets plugin.
*/
add_filter('woof_get_terms_args', function ($args) {
$args['hide_empty'] = true;
return $args;
});
Es kostet beim Laden der Seite nichts, kennt aber weder die aktuelle Kategorie noch die Auswahl des Besuchers: Eine Größe, die nur bei Schuhen existiert, wird weiterhin in der Kategorie Hemden angezeigt. Wenn Cache-Begriffe (Cache terms) eingeschaltet ist, leeren Sie nach dem Hinzufügen des Codes den Begriffs-Cache. Die FAQ leere Begriffe ausblenden zeigt dasselbe Snippet.
Was die dynamische Nachzählung bei großen Katalogen kostet
Jeder Begriff im Formular braucht bei jedem Seitenaufruf eine eigene Zählabfrage, auch ausgeblendete, sodass ein Formular mit 300 Begriffen etwa 300 Zählabfragen ausführt. Bei einigen tausend Produkten fällt das nicht auf; bei Zehntausenden kann es jede Kategorieseite verlangsamen. Bevor Sie die Funktion ausschalten:
- aktivieren Sie Cachen Sie die dynamische Nachzählungsnummer für jedes Element im Filter (Cache dynamic recount number for each item in filter) unter Erweitert → Optionen (Advanced → Options);
- verwenden Sie
dynamic_recount=0bei Formularen, in denen keine Eingrenzung nötig ist, zum Beispiel einem Suchformular in der Kopfzeile; - erwägen Sie den Turbo-Modus, der aus einer vorbereiteten Datendatei statt aus Datenbankabfragen filtert und zählt.
Die Einzelheiten stehen unter Produktfilterung in großen Katalogen beschleunigen.
Checkliste, wenn weiterhin irrelevante Optionen angezeigt werden
- Anzahl anzeigen (Show count), Dynamische Nachzählung (Dynamic recount) und Leere Begriffe ausblenden (Hide empty terms) stehen alle auf Ja (oder die Turbo-Modus-Kopien davon, wenn der Turbo-Modus aktiv ist).
- Die Zahlen werden mit Text der Begriffszählung ausblenden (Hide terms count text) ausgeblendet, nicht dadurch, dass Anzahl anzeigen (Show count) auf Nein gesetzt wird.
- Das Feld Dynamische Nachzählung (Dynamic recount) des Widgets steht auf Standard (Default) oder Ja (Yes); im Shortcode steht kein
dynamic_recount=0. - Sie testen auf einem echten Kategorie-Archiv, oder der Shortcode hat auf einer eigenen Seite
taxonomies=. - Der Nachzähl-Cache, der Begriffs-Cache und der Seiten-Cache wurden nach der Änderung geleert.
- Die Logik der Filterung (Logic of filtering) des Attributs ist ODER, wenn andere Werte nach einer Auswahl erhalten bleiben sollen.
Wenn alles eingerichtet ist und eine Kategorie dennoch Werte ohne Produkte auflistet, eröffnen Sie im HUSKY-Support-Forum ein Thema mit einem Link zur Kategorieseite und dem Wert, der ausgeblendet werden soll.