Verschiedene WooCommerce-Filter pro Kategorie anzeigen (Dynamisches Filtern)
Erfahren Sie, wie Sie verschiedene Filtersätze basierend auf Produktkategorien anzeigen, abhängige Filter erstellen und Filter für die WooCommerce-Shop-Seite anpassen.
Das Problem
Standardmäßig zeigt WOOF auf allen Seiten die gleichen Filter an. Allerdings benötigen unterschiedliche Produktkategorien oft unterschiedliche Filtermöglichkeiten:
Beispielszenarien:
- Kategorie Elektronik:Marke, Bildschirmgröße, Speicher, RAM anzeigen
- Bekleidungskategorie:Größe, Farbe, Material, Stil anzeigen
- Möbelkategorie:Material, Farbe, Abmessungen, Raumtyp anzeigen
- Shop-Seite (Hauptarchiv):Nur Kategorien, Preisspanne, ausgewählte Marken anzeigen
Aktuelle Einschränkung:Alle Filteroptionen bleiben global, auch nachdem ein Benutzer eine Kategorie ausgewählt hat, wodurch die Benutzeroberfläche mit irrelevanten Filtern überfüllt ist.
Was Sie lernen werden:
- So aktivieren Sie die abhängige/bedingte Filterung (Filter werden basierend auf der Auswahl aktualisiert)
- So zeigen Sie verschiedene Filter pro Produktkategorie an
- So erstellen Sie benutzerdefinierte Filtersätze für die Shop-Seite
- So verwenden Sie Widget Logic für eine erweiterte Sichtbarkeitssteuerung
Lösung 1: Abhängige Filterung aktivieren (AJAX Redraw)
Der erste Schritt besteht darin, das Neuzeichnen von AJAX-Formularen zu aktivieren, wodurch die Filter dynamisch aktualisiert werden, wenn Benutzer eine Auswahl treffen.
Für Widgets:
- Gehen Sie zuAussehen → Widgets
- Finden Sie Ihr WOOF-Widget
- Aktivieren Sie die Option„Formular AJAX neu zeichnen“
Dadurch werden die Filter nach jeder Auswahl automatisch aktualisiert und nur relevante Optionen angezeigt.
Für Shortcodes:
Fügen Sie die hinzuajax_redrawAttribut zu Ihrem WOOF-Shortcode:
[woof ajax_redraw="1"]
Was das bewirkt:
- Wenn der Benutzer „Rad“ auswählt, werden andere Filter automatisch aktualisiert
- Zeigt nur die für das Rad verfügbaren Untertypen, Materialien und Farben an
- Reduziert Unordnung, indem irrelevante Optionen ausgeblendet werden
Dokumentation: https://products-filter.com/shortcode/woof
Lösung 2: Kategoriebasierte Filtersichtbarkeit (benutzerdefinierter Shortcode)
Diese Lösung erstellt einen dynamischen Shortcode, der je nach aktueller Produktkategorie unterschiedliche Filter anzeigt.
Schritt 1: Erstellen Sie einen benutzerdefinierten Shortcode
Fügen Sie diesen Code zu Ihrem Child-Theme hinzufunctions.php:
/**
* Dynamic WOOF shortcode that shows different filters per category
* Usage: [woof_dynamic]
*/
add_shortcode('woof_dynamic', function () {
// Check if WOOF is active
if (!function_exists('woof_shortcode')) {
return '<!-- WOOF plugin not active -->';
}
// Get current category
$term = get_queried_object();
// Check if we're on a product category page
if (!$term || !isset($term->taxonomy) || $term->taxonomy !== 'product_cat') {
return do_shortcode('[woof]'); // Show default filters
}
// Get category slug
$cat = strtolower($term->slug);
// Define which filters to show for each category
$filters_map = [
'wheel' => ['pa_sub-type', 'pa_material', 'pa_colour', 'pa_size'],
'lingerie' => ['pa_size', 'pa_colour', 'pa_material'],
'massage-candles' => ['pa_type', 'pa_material', 'pa_brand'],
'electronics' => ['pa_brand', 'pa_screen-size', 'pa_storage'],
'clothing' => ['pa_size', 'pa_color', 'pa_material', 'pa_style'],
'furniture' => ['pa_material', 'pa_color', 'pa_dimensions', 'pa_room'],
];
// If category not in map, show default filters
if (!isset($filters_map[$cat])) {
return do_shortcode('[woof]');
}
// Build shortcode with specific filters for this category
$taxonomies = implode(',', $filters_map[$cat]);
return do_shortcode('[woof tax_only="' . esc_attr($taxonomies) . '" ajax_redraw="1"]');
});
Schritt 2: Verwenden Sie den Shortcode
Ersetzen Sie Ihr bestehendes[woof]Shortcode mit:
[woof_dynamic]
Platzieren Sie diesen Shortcode in:
- Widget-Bereiche (Text/HTML-Widget)
- Seitenerstellungsblöcke (Elementor, Divi usw.)
- Theme-Vorlagendateien:
<?php echo do_shortcode('[woof_dynamic]'); ?>
Schritt 3: Konfigurieren Sie Ihre Kategorien
Aktualisieren Sie die$filters_mapArray mit Ihrem tatsächlichen:
- Kategorie Schnecken(z. B. „Rad“, „Elektronik“)
- Attributschnecken(z. B. „pa_brand“, „pa_size“)
Finden Sie Ihre Schnecken:
Kategorie Schnecken:
- Gehen Sie zuProdukte → Kategorien
- Bewegen Sie den Mauszeiger über einen Kategorienamen
- Schauen Sie sich die URL an:
...tag_ID=123&taxonomy=product_cat&post_type=product - Oder bearbeiten Sie die Kategorie und sehen Sie sich das Slug-Feld an
Attributschnecken:
- Gehen Sie zuProdukte → Attribute
- Sie beginnen mit
pa_gefolgt vom Attributnamen - Beispiele:
pa_color,pa_size,pa_brand,pa_material
Lösung 3: Benutzerdefinierte Filter für die Shop-Seite
Die Hauptseite des WooCommerce-Shops erfordert eine andere Handhabung, da es sich nicht um ein Kategoriearchiv handelt.
Kombinierte Lösung: Shop-Seite + Kategorieseiten
Dieser Code verwaltet sowohl die Shop-Seite als auch einzelne Kategorieseiten:
/**
* Dynamic WOOF shortcode with Shop page support
* Shows minimal filters on Shop, full filters on categories
*/
add_shortcode('woof_dynamic', function () {
if (!function_exists('woof_shortcode')) {
return '';
}
// Shop page (main product archive) - show minimal filters
if (is_shop() AND !is_product_category() AND !is_product_tag()) {
return do_shortcode('[woof tax_only="product_cat,pa_colour" by_price="1" ajax_redraw="1"]');
}
// Product category pages - show category-specific filters
$term = get_queried_object();
if ($term AND isset($term->taxonomy) AND $term->taxonomy === 'product_cat') {
$cat = strtolower($term->slug);
// Define filters for each category
$filters_map = [
'wheel' => ['pa_sub-type', 'pa_material', 'pa_colour', 'pa_size'],
'lingerie' => ['pa_size', 'pa_colour', 'pa_material'],
'massage-candles' => ['pa_type', 'pa_material', 'pa_brand'],
'electronics' => ['pa_brand', 'pa_screen-size', 'pa_storage'],
'clothing' => ['pa_size', 'pa_color', 'pa_material', 'pa_style'],
];
if (isset($filters_map[$cat])) {
$taxonomies = implode(',', $filters_map[$cat]);
return do_shortcode('[woof tax_only="' . esc_attr($taxonomies) . '" ajax_redraw="1"]');
}
}
// Fallback - show all filters
return do_shortcode('[woof ajax_redraw="1"]');
});
Was dieser Code bewirkt:
- Auf der Shop-Seite:Zeigt nur Kategorien-, Farb- und Preisfilter an
- Auf Kategorieseiten:Zeigt kategoriespezifische Filter aus der Zuordnung an
- Auf anderen Seiten:Zeigt Standardfilter an
Shop-Seitenfilter anpassen:Ändern Sie diese Zeile, um verschiedene Filter auf der Shop-Seite anzuzeigen:
[woof tax_only="product_cat,pa_colour" by_price="1" ajax_redraw="1"]
Verfügbare Parameter:
tax_only="product_cat,pa_brand"– Nur diese Taxonomien anzeigenby_price="1"– Preisspannenfilter anzeigenby_only="product_cat,pa_brand"– Alternative zu tax_onlyajax_redraw="1"– Aktivieren Sie dynamische Updates
Lösung 4: Widget-Logik für bedingte Sichtbarkeit
Wenn Sie lieber Widgets anstelle von Shortcodes verwenden, können Sie die Widget-Sichtbarkeit mit bedingter Logik steuern.
Schritt 1: Installieren Sie das Widget Logic Plugin
Wählen Sie eines dieser Plugins:
- Widget-Logik: https://wordpress.org/plugins/widget-logic/
- Widget nach Logik anzeigen: https://github.com/realmag777/Show-WordPress-Widget-by-Logic
Schritt 2: Erstellen Sie mehrere WOOF-Widgets
- Gehen Sie zuAussehen → Widgets
- Fügen Sie Ihrer Seitenleiste mehrere WOOF-Widgets hinzu
- Konfigurieren Sie jedes Widget mit unterschiedlichen Filtern
Schritt 3: Bedingte Logik hinzufügen
Fügen Sie für jedes Widget Sichtbarkeitsbedingungen hinzu:
Nur in der Kategorie „Rad“ anzeigen:
is_product_category('wheel')
Nur in der Kategorie „Dessous“ anzeigen:
is_product_category('lingerie')
Nur auf Shop-Seite anzeigen:
is_shop() AND !is_product_category()
In mehreren Kategorien anzeigen:
is_product_category(array('wheel', 'lingerie', 'massage-candles'))
Überall außer Shop-Seite anzeigen:
!is_shop()
In den Kategorien „Elektronik“ oder „Computer“ anzeigen:
is_product_category('electronics') || is_product_category('computers')
Beispiele aus der Praxis
Beispiel 1: Shop für Erwachsenenprodukte
$filters_map = [
'wheel' => ['pa_type', 'pa_material', 'pa_color', 'pa_power-source', 'pa_waterproof'],
'lingerie' => ['pa_size', 'pa_color', 'pa_style', 'pa_material'],
'oil' => ['pa_type', 'pa_brand', 'pa_ingredients', 'pa_volume'],
'toys' => ['pa_category', 'pa_material', 'pa_size', 'pa_color'],
];
Beispiel 2: Elektronikladen
$filters_map = [
'laptops' => ['pa_brand', 'pa_processor', 'pa_ram', 'pa_storage', 'pa_screen-size'],
'smartphones' => ['pa_brand', 'pa_storage', 'pa_ram', 'pa_camera', 'pa_battery'],
'headphones' => ['pa_brand', 'pa_type', 'pa_connection', 'pa_noise-cancelling'],
'cameras' => ['pa_brand', 'pa_megapixels', 'pa_sensor-size', 'pa_video-quality'],
];
Beispiel 3: Modegeschäft
$filters_map = [
'mens-clothing' => ['pa_size', 'pa_color', 'pa_material', 'pa_brand', 'pa_style'],
'womens-clothing' => ['pa_size', 'pa_color', 'pa_material', 'pa_brand', 'pa_occasion'],
'shoes' => ['pa_size', 'pa_color', 'pa_brand', 'pa_type', 'pa_material'],
'accessories' => ['pa_color', 'pa_material', 'pa_brand', 'pa_type'],
];
Beispiel 4: Möbelhaus
$filters_map = [
'bedroom' => ['pa_type', 'pa_material', 'pa_color', 'pa_style', 'pa_size'],
'living-room' => ['pa_type', 'pa_material', 'pa_color', 'pa_seating-capacity'],
'office' => ['pa_type', 'pa_material', 'pa_color', 'pa_ergonomic'],
'outdoor' => ['pa_type', 'pa_material', 'pa_weather-resistant', 'pa_color'],
];
Erweitert: Preis und Kategorien einbeziehen
Wenn Sie zusätzlich zu den Attributen auch Preisspannen und Kategorien anzeigen möchten:
// On category pages, add price and allow category drill-down
if (isset($filters_map[$cat])) {
$taxonomies = implode(',', $filters_map[$cat]);
return do_shortcode('[woof tax_only="product_cat,' . esc_attr($taxonomies) . '" by_price="1" ajax_redraw="1"]');
}
Erklärung der Parameter:
product_cat– Zeigt den Kategoriefilter für den Drilldown anby_price="1"– Zeigt den Schieberegler für die Preisspanne anajax_redraw="1"– Aktualisiert Filter dynamisch
Fehlerbehebung
Filter werden nicht dynamisch aktualisiert
Problem:Filter bleiben nach der Auswahl statisch
Lösung:
- Stellen Sie sicher
ajax_redraw="1"steht in deinem Shortcode - Aktivieren Sie „Formular-AJAX-Neuzeichnen“ in den Widget-Einstellungen
- Überprüfen Sie die JavaScript-Konsole auf Fehler
In der Kategorie werden falsche Filter angezeigt
Problem:In der Kategorie wird ein falscher Filtersatz angezeigt
Lösung:
- Überprüfen Sie, ob der Kategorie-Slug korrekt ist (überprüfen Sie die URL- oder Kategorieeinstellungen).
- Verwenden Sie Kleinbuchstaben
$filters_maparray - Überprüfen Sie, ob in Ihrer Zuordnung eine Kategorie vorhanden ist
Filter werden überhaupt nicht angezeigt
Problem:Auf der Seite sind keine Filter sichtbar
Lösung:
- Überprüfen Sie, ob Attribut-Slugs mit beginnen
pa_(z.B.,pa_colornotcolor) - Überprüfen Sie, ob den Produkten in dieser Kategorie Attribute zugewiesen sind
- Verwenden
[woof]vorübergehend, um zu sehen, ob der Basis-Shortcode funktioniert
Auf der Shop-Seite werden Kategoriefilter angezeigt
Problem:Shop-Seite mit falschem Filtersatz
Lösung:
- Verifizieren
is_shop()Die Bedingung steht in Ihrem Code an erster Stelle - Überprüfen Sie das
!is_product_category()ist im Preis inbegriffen - Alle Caches löschen (WordPress, Server, Browser)
Attribut-Slugs funktionieren nicht
Problem:Filter werden für bestimmte Attribute nicht angezeigt
Lösung:
- Gehen Sie zuProdukte → Attributeum die richtigen Schnecken zu finden
- Denken Sie daran, es zu verwenden
pa_Präfix (WooCommerce-Anforderung) - Rechtschreibung prüfen:
pa_colourvspa_color
Code funktioniert nach dem Hinzufügen nicht
Problem:Weißer Bildschirm oder Fehler nach dem Hinzufügen von Code
Lösung:
- Überprüfen Sie PHP-Syntaxfehler im Fehlerprotokoll
- Stellen Sie sicher, dass Sie functions.php des untergeordneten Themas bearbeiten
- Stellen Sie sicher, dass alle Klammern und Anführungszeichen geschlossen sind
- Entfernen Sie den Code und fügen Sie ihn Zeile für Zeile wieder hinzu
Leistungsüberlegungen
Auswirkungen der AJAX-Neuzeichnung:
- Jede Auswahl löst eine AJAX-Anfrage aus
- Mehr Produkte = längere Reaktionszeit
- Lösung: Caching nutzen und Datenbank optimieren
Mehrere Widgets vs. Shortcode:
- Widgets: Mehr Speicherverbrauch (alle Widgets werden geladen)
- Shortcode: Effizienter (nur ein Satz lädt)
- Empfehlung: Shortcode-Ansatz verwenden
Große Kataloge:
- Berücksichtigen Sie die Paginierung in Filtern
- Verwenden Sie Lazy Loading für Attribute
- Implementieren Sie serverseitiges Caching
Alternative Ansätze
Verwendung mehrerer Shortcodes
Verwenden Sie anstelle eines dynamischen Shortcodes mehrere statische:
// On wheel category page
[woof tax_only="pa_sub-type,pa_material,pa_colour,pa_size" ajax_redraw="1"]
// On Lingerie category page
[woof tax_only="pa_size,pa_colour,pa_material" ajax_redraw="1"]
// On Shop page
[woof tax_only="product_cat,pa_colour" by_price="1" ajax_redraw="1"]
Verwenden Sie dann Widget Logic, um auf jeder Seite den richtigen Shortcode anzuzeigen.
Verwenden von Vorlagendateien
Fügen Sie bedingte Logik direkt in Ihrer Theme-Vorlage hinzu:
<?php
if (is_product_category('books')) {
echo do_shortcode('[woof tax_only="pa_sub-type,pa_material,pa_colour,pa_size"]');
} elseif (is_product_category('lingerie')) {
echo do_shortcode('[woof tax_only="pa_size,pa_colour,pa_material"]');
} elseif (is_shop()) {
echo do_shortcode('[woof tax_only="product_cat,pa_colour" by_price="1"]');
} else {
echo do_shortcode('[woof]');
}
?>
Zusammenfassung
Problem:Überall werden die gleichen Filter angezeigt, was die Benutzeroberfläche überfüllt
Lösung 1:Aktivieren Sie AJAX-Redraw für abhängige Filterung
Lösung 2:Erstellen[woof_dynamic]Shortcode mit Kategoriezuordnung
Lösung 3:Fügen Sie die Shop-Seitenverwaltung mit minimalen Filtern hinzu
Lösung 4:Verwenden Sie Widget Logic für eine erweiterte Sichtbarkeitskontrolle
Bester Ansatz:Kombinieren Sie die Lösungen 2 + 3 für eine umfassende dynamische Filterung
Schlüsselcode:
add_shortcode('woof_dynamic', function() {
// Shop page logic
if (is_shop() AND !is_product_category()) {
return do_shortcode('[woof tax_only="product_cat" by_price="1"]');
}
// Category mapping
$term = get_queried_object();
if ($term AND $term->taxonomy === 'product_cat') {
$filters_map = [
'category-slug' => ['pa_attribute1', 'pa_attribute2'],
];
// Return category-specific filters
}
return do_shortcode('[woof]'); // Fallback
});
Dadurch entsteht ein professionelles, benutzerfreundliches Filtererlebnis, das auf jede Produktkategorie zugeschnitten ist.