HUSKY - Product Filter for WooCommerce

WooCommerce-Produktsuche beschleunigen (HUSKY-Textfilter)

Wenn Ihre Website über eine große Anzahl an Produkten verfügt (über 3000) und eine WooCommerce-Produktsuche durchführt[woof_text_filter]langsam ist, hilft Ihnen dieser Leitfaden bei der Optimierung.

Das Problem

Standardmäßig verwendet HUSKY für Suchvorgänge die SQL JOIN-Methode, die bei großen Datenbanken langsam sein kann. Häufige Symptome sind Textsuchen, die mehr als 10 Sekunden dauern, und das Filtern von Kategorien, die zu Verzögerungen führen.

Lösung 1: Schnellsuchmethode aktivieren (post__in)

Das Plugin verfügt über eine integrierte schnellere Suchmethode, die verwendetpost__inanstelle von SQL JOINs. Dies ist bei großen Produktkatalogen deutlich effizienter.

Durchführung

Fügen Sie diese einzelne Zeile zu Ihrem Thema hinzufunctions.phpDatei:

add_filter('woof_husky_query_post__in', '__return_true');

Erwartete Ergebnisse

  • Textsuchgeschwindigkeit: Von 10+ Sekunden bis 1-3 Sekunden
  • Funktioniert sofort nach dem Hinzufügen des Codes
  • Keine Datenbankänderungen erforderlich

Lösung 2: Optimieren Sie die Kategoriefilterung

Wenn die Kategoriefilterung nach der Aktivierung der Schnellsuche immer noch langsam ist, haben Sie zwei Möglichkeiten:

Option A: Datenbankindizes hinzufügen (empfohlen)

Datenbankindizes beschleunigen Kategorieabfragen erheblich, indem sie die optimierenterm_relationships and term_taxonomyTische.

Fügen Sie diesen Code zu Ihrem hinzufunctions.php:

add_action('admin_init', 'add_woof_category_indexes', 999);

function add_woof_category_indexes() {
    global $wpdb;

    // Run only once
    if (get_option('woof_category_indexes_added')) {
        return;
    }

    // Add index to term_relationships table
    $wpdb->query("
        ALTER TABLE {$wpdb->term_relationships}
        ADD INDEX woof_cat_idx (object_id, term_taxonomy_id)
    ");

    // Add index to term_taxonomy table
    $wpdb->query("
        ALTER TABLE {$wpdb->term_taxonomy}
        ADD INDEX woof_tax_idx (taxonomy, term_id)
    ");

    // Mark as completed
    update_option('woof_category_indexes_added', true);
}

So funktioniert es:

  • Wird beim ersten Laden der Admin-Seite einmal ausgeführt
  • Erstellt optimierte Datenbankindizes
  • Speichert die Abschlussmarkierung, um eine erneute Ausführung zu verhindern

Erwartete Ergebnisse:

  • Kategoriefilterung: Von mehreren Sekunden bis < 1 Sekunde
  • Dauerhafte Lösung (Indizes bleiben nach dem Entfernen des Codes erhalten)

Option B: Kategorieabfragen zwischenspeichern

Wenn Sie die Datenbankstruktur nicht ändern können oder einen anderen Ansatz wünschen, bietet Caching eine gute Leistungsverbesserung.

Fügen Sie diesen Code zu Ihrem hinzufunctions.php:

add_filter('woof_get_query_args', 'cache_woof_category_queries', 10, 1);

function cache_woof_category_queries($args) {
    // Only cache when category filter is used
    if (empty($_GET['product_cat'])) {
        return $args;
    }

    // Generate cache key based on current filters
    $cache_key = 'woof_cat_' . md5(serialize($_GET));
    $cached_ids = get_transient($cache_key);

    // Return cached results if available
    if ($cached_ids !== false) {
        $args['post__in'] = $cached_ids;
        return $args;
    }

    return $args;
}

add_action('pre_get_posts', 'store_woof_category_cache', 999);

function store_woof_category_cache($query) {
    // Store query results in cache
    if (!empty($_GET['product_cat']) && !empty($query->posts)) {
        $cache_key = 'woof_cat_' . md5(serialize($_GET));
        $post_ids = wp_list_pluck($query->posts, 'ID');
        set_transient($cache_key, $post_ids, HOUR_IN_SECONDS);
    }
}

So funktioniert es:

  • Speichert die Ergebnisse des Kategoriefilters 1 Stunde lang im Cache
  • Erzeugt einen eindeutigen Cache-Schlüssel pro Filterkombination
  • Gibt bei nachfolgenden identischen Suchen zwischengespeicherte Produkt-IDs zurück

Erwartete Ergebnisse:

  • Erste Suche: Normale Geschwindigkeit
  • Nachfolgende identische Suchvorgänge: Nahezu sofortige Ergebnisse
  • Der Cache läuft nach 1 Stunde automatisch ab

Welche Lösung soll verwendet werden?

Bei Problemen mit der Geschwindigkeit der Textsuche:

Verwenden Sie Lösung 1(post__in-Filter) – dies ist die einfachste und effektivste Lösung.

Bei Geschwindigkeitsproblemen bei der Kategoriefilterung:

Verwenden Sie Lösung 2A(Datenbankindizes), wenn:

  • Sie haben Zugriff auf die Datenbank
  • Sie wollen eine permanente Optimierung
  • Sie benötigen eine konstante Geschwindigkeit für alle Abfragen

Verwenden Sie Lösung 2B(Caching) wenn:

  • Sie können die Datenbankstruktur nicht ändern
  • Ihre Benutzer wiederholen häufig dieselben Suchanfragen
  • Sie haben variable Suchmuster

Kombinationslösungen:

Sie können alle Lösungen sicher zusammen verwenden, um maximale Leistung zu erzielen:

  1. Aktivierenpost__inMethode (Lösung 1)
  2. Datenbankindizes hinzufügen (Lösung 2A)
  3. Caching hinzufügen (Lösung 2B) – optional für zusätzlichen Boost

Wichtige Hinweise

  • Untergeordnetes Thema erforderlich: Fügen Sie immer Code zu einem untergeordneten Thema hinzufunctions.phpum Verluste bei Theme-Updates zu verhindern
  • Zuerst sichern: Bevor Sie Datenbankindizes hinzufügen, sichern Sie Ihre Datenbank
  • Testumgebung: Testen Sie die Lösungen nach Möglichkeit zuerst auf der Staging-Site
  • Cache-Löschen: Wenn Sie eine Caching-Lösung verwenden, denken Sie daran, die zwischengespeicherten Ergebnisse stündlich zu aktualisieren

Testen Sie Ihre Änderungen

  1. Fügen Sie den Code zu Ihrem hinzufunctions.php
  2. Alle Caches löschen (Browser, WordPress, Server)
  3. Testen Sie eine Suche, die zuvor langsam war
  4. Überwachen Sie die Verbesserung der Suchzeit

Serverseitige Optimierung

Wenn diese Lösungen keine ausreichende Verbesserung bringen, sollten Sie Folgendes in Betracht ziehen:

  • Upgrade auf schnelleres Hosting
  • Objekt-Caching aktivieren (Redis/Memcached)
  • Optimierung Ihrer Datenbankserverkonfiguration
  • Reduzierung der Anzahl aktiver Plugins

Quelle: https://pluginus.net/support/topic/very-slow-woof_text_filter-searches/