HUSKY - Product Filter for WooCommerce

So beschleunigen Sie die WooCommerce-Produktfilterung in großen Katalogen mit HUSKY

So beschleunigen Sie die WooCommerce-Produktfilterung in großen Katalogen mit HUSKY

Wenn ein WooCommerce-Shop über mehrere tausend Produkte hinauswächst, kann der Produktfilter zu einem Engpass werden. Jeder Taxonomie-Begriff benötigt eine Zählabfrage, jedes Attribut fügt einen JOIN hinzu, und die dynamische Neuzählung vervielfacht die Datenbankarbeit. HUSKY (ehemals WOOF) enthält mehrere integrierte Caching-Mechanismen und Hooks, die speziell für große Kataloge entwickelt wurden.

Cache Dynamic Recount aktivieren

In HUSKY → Advanced → Options finden Sie die Einstellung Cache dynamic recount number for each item in filter. Wenn aktiviert, speichert HUSKY die Neuzählungsergebnisse für jeden Begriff in der WordPress-Optionstabelle oder als Transient, sodass nachfolgende Seitenaufrufe die Zählabfragen vollständig überspringen. Dies ist der mit Abstand effektivste Schalter für Shops, die Dynamic Recount mit vielen Taxonomie-Begriffen verwenden.

Der Cache wird nach einem Zeitplan geleert, nicht bei Produktänderungen. Das Intervall wird durch die Auto-Clean-Option neben der Cache-Einstellung festgelegt (standardmäßig eine Woche). Nach dem Hinzufügen oder Importieren einer Charge von Produkten können Sie ihn manuell mit der Schaltfläche clear cache im Admin-Panel leeren.

Cache Terms aktivieren

Neben dem Neuzählungs-Cache befindet sich die Einstellung Cache terms. Wenn das Filterformular eine große Anzahl von Begriffen enthält (Hunderte von Produktkategorien, Attributen oder Tags), speichert diese Option die gerenderte Begriffsliste zwischen, sodass das HTML nicht bei jedem Seitenaufruf neu erstellt werden muss.

Es funktioniert auf die gleiche Weise wie der Neuzählungs-Cache: wird nach einem Zeitplan geleert, mit einem eigenen Auto-Clean-Intervall und einer Schaltfläche clear terms cache im Admin. Für Shops mit tief verschachtelten Kategoriebäumen oder vielen Attributwerten reduziert die gleichzeitige Aktivierung beider Caches die Datenbanklast pro Anfrage erheblich.

Turbo Mode für vorab generierte Produktdaten verwenden

Turbo Mode ist die leistungsfähigste Optimierung, die HUSKY für große Kataloge bietet. Wenn aktiviert, wird eine JSON-Datendatei mit Produktparametern vorab generiert. Anstatt komplexe WP_Query + tax_query + meta_query bei jeder Filteranfrage zu erstellen und auszuführen, liest das Plugin vorberechnete Daten — bei großen Katalogen ist der Unterschied in der Antwortzeit erheblich.

Turbo Mode wird unter HUSKY → Extensions → Turbo Mode konfiguriert. Die Dateiregenerierung kann über WordPress-Cron oder, für Zuverlässigkeit, über einen echten Server-Crontab geplant werden (siehe FAQ zur Turbo-Mode-Cron-Einrichtung).

Das Turbo-Mode-Produktlimit anpassen

Standardmäßig verarbeitet Turbo Mode bis zu 15.000 Produkte während der Cache-Generierung. In Shops mit mehr Produkten stoppt die Generierung, bevor alle Produkte indiziert sind. Verwenden Sie den Hook woof_turbo_mode_products_limit, um dieses Limit zu erhöhen:

add_filter('woof_turbo_mode_products_limit', function($limit) {
    // Limit für Kataloge mit mehr als 15.000 Produkten erhöhen
    return 50000;
});

Der Hook befindet sich in ext/turbo_mode/index.php. Setzen Sie den Wert hoch genug, um Ihren gesamten Katalog abzudecken, aber achten Sie auf die PHP-Ausführungszeit und Speicherlimits während der Dateigenerierung.

Die Zählmethode für große Websites optimieren

Das Dynamic-Recount-System verwendet einen WP_Query-basierten Zähler, der auf Shops mit vielen Produkten erheblichen Speicher verbrauchen kann. Der Hook woof_counter_method (Quelle: classes/counter.php) ermöglicht es Ihnen, auf eine leichtere Zählmethode umzuschalten, die nopaging=false und posts_per_page=1 setzt und so den Speicherverbrauch pro Abfrage reduziert:

add_filter('woof_counter_method', function($saving_memory) {
    // Speichersparenden Zählmodus aktivieren
    return true;
});

Testen Sie dies zuerst auf Ihrer Staging-Seite — es funktioniert gut bei manchen Konfigurationen, aber nicht bei allen.

Die Produktausgabe mit woof_products_query anpassen

Der Filter-Hook woof_products_query (Quelle: index.php) übergibt das $query_args-Array des Shortcodes [woof_products], bevor dessen WP_Query ausgeführt wird. Verwenden Sie ihn, um benutzerdefinierte Meta-Abfragen hinzuzufügen, bestimmte Produkte aus der Ausgabe auszuschließen oder die Abfragestruktur anzupassen:

add_filter('woof_products_query', function($query_args) {
    // Produkte ausschließen, die niemals in Filterergebnissen erscheinen sollen
    $query_args['meta_query'][] = array(
        'key'     => '_exclude_from_filter',
        'compare' => 'NOT EXISTS'
    );
    return $query_args;
});

Für Manipulationen auf Taxonomie-Ebene (Ändern der Beziehungsoperatoren zwischen Taxonomien) verwenden Sie den verwandten Hook woof_main_query_tax_relations.

WordPress Object Cache für Filterdaten aktivieren

HUSKY unterstützt den Hook woof_use_wp_cache, um seine internen Daten durch den WordPress-Objekt-Cache zu leiten. Wenn Sie bereits einen persistenten Objekt-Cache-Backend (Redis, Memcached) verwenden, verschiebt die Aktivierung dieses Hooks die Filterdaten aus der Datenbank in den schnellen Arbeitsspeicher:

add_filter('woof_use_wp_cache', function($is){
    return true;
});

Wichtig: Dieser Hook hat ohne installiertes persistentes Objekt-Caching-Plugin keine Wirkung. Er ist kein Ersatz für die integrierten Cache-Einstellungen — er ergänzt sie, wenn Ihre Hosting-Umgebung Objekt-Caching unterstützt.

Einstellungen für beste Ergebnisse kombinieren

Die empfohlene Basisausstattung für einen großen Katalog (10.000+ Produkte, viele Taxonomie-Begriffe):

  • Cache dynamic recount und Cache terms in Advanced → Options aktivieren
  • Turbo Mode aktivieren und das Produktlimit an Ihre Kataloggröße anpassen
  • woof_use_wp_cache anwenden, wenn ein persistenter Objekt-Cache verfügbar ist
  • woof_counter_method auf der Staging-Seite testen, um zu sehen, ob der Speichersparmodus für Ihr Setup funktioniert
  • woof_products_query nur verwenden, wenn Sie die Ausgabequeries von [woof_products] anpassen müssen

Beginnen Sie mit den beiden integrierten Cache-Umschaltern — sie erfordern keine Code-Änderungen und liefern die deutlichste Verbesserung von allein.