HUSKY - Product Filter for WooCommerce

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:

  1. So aktivieren Sie die abhängige/bedingte Filterung (Filter werden basierend auf der Auswahl aktualisiert)
  2. So zeigen Sie verschiedene Filter pro Produktkategorie an
  3. So erstellen Sie benutzerdefinierte Filtersätze für die Shop-Seite
  4. 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:

  1. Gehen Sie zuAussehen → Widgets
  2. Finden Sie Ihr WOOF-Widget
  3. 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 mitpa_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:

  1. Auf der Shop-Seite:Zeigt nur Kategorien-, Farb- und Preisfilter an
  2. Auf Kategorieseiten:Zeigt kategoriespezifische Filter aus der Zuordnung an
  3. 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 anzeigen
  • by_price="1"– Preisspannenfilter anzeigen
  • by_only="product_cat,pa_brand"– Alternative zu tax_only
  • ajax_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:

 

Schritt 2: Erstellen Sie mehrere WOOF-Widgets

  1. Gehen Sie zuAussehen → Widgets
  2. Fügen Sie Ihrer Seitenleiste mehrere WOOF-Widgets hinzu
  3. 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 an
  • by_price="1"– Zeigt den Schieberegler für die Preisspanne an
  • ajax_redraw="1"– Aktualisiert Filter dynamisch

Fehlerbehebung

Filter werden nicht dynamisch aktualisiert

Problem:Filter bleiben nach der Auswahl statisch
Lösung:

  • Stellen Sie sicherajax_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_map array
  • Ü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 beginnenpa_(z.B.,pa_color not color)
  • Ü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:

  • Verifizierenis_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 verwendenpa_Präfix (WooCommerce-Anforderung)
  • Rechtschreibung prüfen:pa_colour vs pa_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.