HUSKY - Product Filter for WooCommerce

Wie man die WooCommerce Produktfilterung in großen Katalogen mit HUSKY beschleunigt

Wie man die WooCommerce Produktfilterung in großen Katalogen mit HUSKY beschleunigt

Wenn ein WooCommerce-Shop über mehrere Tausend Produkte hinauswächst, kann der Produktfilter zu einem Engpass werden. Jeder taxonomy term benötigt eine count query, jedes attribute fügt einen join hinzu, und Dynamic Recount vervielfacht die Datenbankarbeit. HUSKY (ehemals WOOF) enthält mehrere integrierte caching-Mechanismen und hooks, die speziell für große Kataloge entwickelt wurden. Dieser Artikel behandelt nur die Funktionen, die im Quellcode des Plugins existieren – keine hypothetischen Einstellungen, keine erfundenen hooks.

Cache Dynamic Recount aktivieren

Unter HUSKY → Erweitert → Optionen finden Sie die Einstellung Cache dynamic recount number for each item in filter. Wenn aktiviert, speichert HUSKY die recount-Ergebnisse für jeden term in der WordPress options table oder als transient, sodass nachfolgende Seitenaufrufe die counting queries vollständig überspringen. Dies ist der effektivste Schalter für Shops, die Dynamic Recount mit vielen taxonomy terms 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 (die Standardablaufzeit beträgt eine Woche). Nach dem Hinzufügen oder Importieren einer Produktcharge können Sie ihn manuell mit der Schaltfläche clear cache im Admin-Panel leeren.

Cache Terms aktivieren

Neben dem recount cache befindet sich die Einstellung Cache terms. Wenn das Filterformular eine große Anzahl von terms (Hunderte von Produktkategorien, attributes oder tags) enthält, speichert diese Option die gerenderte term-Liste im cache, sodass das HTML nicht bei jedem Seitenaufruf neu aufgebaut werden muss.

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

Turbo Mode für vorab generierte Produktdaten verwenden

Turbo Mode ist die leistungsstärkste Optimierung, die HUSKY für große Kataloge bietet. Wenn aktiviert, generiert es eine flat file, die die gefilterten product IDs für jede Kombination von active terms enthält. Anstatt komplexe WP_Query + tax_query + meta_query bei jeder filter request zu erstellen und auszuführen, liest das Plugin eine vorab berechnete Datei – der Unterschied in der Antwortzeit beträgt oft eine Größenordnung.

Turbo Mode wird unter HUSKY → Erweiterungen → 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 woof_turbo_mode_products_limit hook, um dieses Limit zu erhöhen:

add_filter('woof_turbo_mode_products_limit', function($limit) {
    // Increase limit for catalogs larger than 15,000 products
    return 50000;
});

Der hook befindet sich in ext/turbo_mode/index.php:277. Setzen Sie den Wert hoch genug, um Ihren gesamten Katalog abzudecken, aber achten Sie auf PHP execution time und memory limits während der Dateigenerierung.

Den Counter Method für große Websites optimieren

Das Dynamic Recount-System verwendet einen WP_Query-basierten Zähler, der in Shops mit vielen Produkten erheblichen Speicher verbrauchen kann. Der woof_counter_method hook (Quelle: classes/counter.php) ermöglicht es Ihnen, zu einer leichteren Zählmethode zu wechseln, die nopaging=false und posts_per_page=1 setzt, wodurch der Speicherverbrauch pro query reduziert wird, auf Kosten potenziell weniger präziser Zählungen:

add_filter('woof_counter_method', function($saving_memory) {
    // Enable memory-saving counter mode
    return true;
});

Testen Sie dies zuerst auf Ihrer staging-Site – es funktioniert gut bei einigen Konfigurationen, aber nicht bei allen.

Die Filter Query mit woof_products_query anpassen

Der woof_products_query filter hook (Quelle: index.php) übergibt das vollständige $query_args-Array, bevor die WP_Query ausgeführt wird. Verwenden Sie es, um custom meta queries hinzuzufügen, bestimmte Produkte auszuschließen oder die query structure für die Leistung anzupassen:

add_filter('woof_products_query', function($query_args) {
    // Exclude products that should never appear in filter results
    $query_args['meta_query'][] = array(
        'key'     => '_exclude_from_filter',
        'compare' => 'NOT EXISTS'
    );
    return $query_args;
});

Für Manipulationen auf taxonomy-Ebene (Ändern von relation operators zwischen taxonomies) verwenden Sie den verwandten woof_main_query_tax_relations hook.

WordPress Object Cache für Filterdaten aktivieren

HUSKY unterstützt den woof_use_wp_cache hook, um seine internen Daten über den WordPress object cache zu leiten. Wenn Sie bereits ein persistent object cache backend (Redis, Memcached) verwenden, verschiebt die Aktivierung dieses hooks Filterdaten aus der Datenbank in einen schnellen in-memory storage:

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

Wichtig: Dieser hook hat keine Wirkung ohne ein installiertes persistent object caching-Plugin. Es ist kein Ersatz für die integrierten cache-Einstellungen – es ergänzt sie, wenn Ihre Hosting-Umgebung object caching unterstützt.

Einstellungen für beste Ergebnisse kombinieren

Die empfohlene Basis für einen großen Katalog (10,000+ Produkte, viele taxonomy terms):

  • Aktivieren Sie Cache dynamic recount und Cache terms unter Erweitert → Optionen
  • Aktivieren Sie Turbo Mode und passen Sie das Produktlimit an die Größe Ihres Katalogs an
  • Wenden Sie woof_use_wp_cache an, wenn ein persistent object cache verfügbar ist
  • Testen Sie woof_counter_method auf staging, um zu sehen, ob der Speicher-Sparmodus für Ihre Einrichtung funktioniert
  • Verwenden Sie woof_products_query nur, wenn Sie bestimmte Produkte aus den Filterergebnissen ausschließen müssen

Beginnen Sie mit den beiden integrierten cache-Schaltern – sie erfordern keine Codeänderungen und liefern die spürbarste Verbesserung von selbst.