Wie man die Textfilter-Suchen von WOOF beschleunigt
Wenn Ihre Website eine große Anzahl von Produkten (3000+) hat und Sie langsame Suchleistung mit [woof_text_filter], diese Anleitung hilft Ihnen bei der Optimierung.
Das Problem
Standardmäßig verwendet HUSKY die SQL JOIN-Methode für Suchen, was bei großen Datenbanken langsam werden kann. Textsuchanfragen, die 10+ Sekunden dauern, und Kategorie-Filterung, die Verzögerungen verursacht, sind häufige Symptome.
Lösung 1: Schnelle Suchmethode aktivieren (post__in)
Das Plugin verfügt über eine integrierte schnellere Suchmethode, die verwendet post__in anstelle von SQL JOINs. Dies ist wesentlich effizienter für große Produktkataloge.
Implementierung
Fügen Sie diese einzelne Zeile zu Ihrem Theme hinzu functions.php Datei:
add_filter('woof_husky_query_post__in', '__return_true');
Erwartete Ergebnisse
- Textsuchgeschwindigkeit: Von 10+ Sekunden auf 1-3 Sekunden
- Funktioniert sofort nach dem Hinzufügen des Codes
- Keine Datenbankänderungen erforderlich
Lösung 2: Kategorie-Filterung optimieren
Wenn die Kategorie-Filterung auch nach Aktivierung der Schnellsuche langsam ist, haben Sie zwei Möglichkeiten:
Option A: Datenbankindizes hinzufügen (empfohlen)
Datenbankindizes beschleunigen Kategorieabfragen dramatisch durch Optimierung des term_relationships und term_taxonomy Tabellen.
Fügen Sie diesen Code zu Ihrem hinzu functions.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:
- Läuft einmal beim ersten Laden der Admin-Seite
- Erstellt optimierte Datenbankindizes
- Speichert Abschlussflagge, um erneutes Ausführen zu verhindern
Erwartete Ergebnisse:
- Kategorie-Filterung: Von mehreren Sekunden auf < 1 Sekunde
- Permanente Lösung (Indizes bleiben nach Code-Entfernung erhalten)
Option B: Kategorieabfragen zwischenspeichern
Wenn Sie die Datenbankstruktur nicht ändern können oder einen anderen Ansatz wünschen, bietet Caching eine gute Leistungssteigerung.
Fügen Sie diesen Code zu Ihrem hinzu functions.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:
- Cacht die Kategorie-Filterergebnisse für 1 Stunde
- Generiert einen eindeutigen Cache-Schlüssel pro Filterkombination
- Gibt gecachte Produkt-IDs bei nachfolgenden identischen Suchen zurück
Erwartete Ergebnisse:
- Erste Suche: Normale Geschwindigkeit
- Nachfolgende identische Suchen: Nahezu sofortige Ergebnisse
- Cache läuft nach 1 Stunde automatisch ab
Welche Lösung soll verwendet werden?
Bei Problemen mit der Textsuche-Geschwindigkeit:
Lösung 1 verwenden (post__in Filter) – das ist die einfachste und effektivste Lösung.
Für Probleme mit der Geschwindigkeit der Kategorie-Filterung:
Lösung 2A verwenden (Datenbankindizes) wenn:
- Sie haben Datenbankzugriff
- Sie möchten eine permanente Optimierung
- Sie benötigen eine konsistente Geschwindigkeit für alle Abfragen
Verwenden Sie Lösung 2B (Caching) falls:
- Sie können die Datenbankstruktur nicht ändern
- Ihre Benutzer wiederholen oft dieselben Suchanfragen
- Sie haben variable Suchmuster
Kombination von Lösungen:
Sie können alle Lösungen sicher zusammen für maximale Leistung nutzen:
- Aktivieren
post__inMethode (Lösung 1) - Datenbankindizes hinzufügen (Lösung 2A)
- Caching hinzufügen (Lösung 2B) – optional für zusätzliche Leistung
Wichtige Hinweise
- Child Theme erforderlich: Fügen Sie Code immer zu einem Child-Theme hinzu
functions.phpum Verluste während Theme-Updates zu vermeiden - Erst sichern: Sichern Sie Ihre Datenbank, bevor Sie Datenbankindizes hinzufügen
- Testumgebung: Testen Sie Lösungen zuerst auf einer Staging-Website, wenn möglich
- Cache leeren: Wenn Sie eine Caching-Lösung verwenden, denken Sie daran, dass zwischengespeicherte Ergebnisse stündlich aktualisiert werden.
Testen Sie Ihre Änderungen
- Fügen Sie den Code zu Ihrem hinzu
functions.php - Alle Caches löschen (Browser, WordPress, Server)
- Testen Sie eine Suche, die zuvor langsam war
- Verbesserung der Suchzeit überwachen
Serverseitige Optimierung
Wenn diese Lösungen keine ausreichende Verbesserung bieten, sollten Sie Folgendes in Betracht ziehen:
- Auf schnelleres Hosting umsteigen
- Aktivieren von Objekt-Caching (Redis/Memcached)
- Optimierung Ihrer Datenbankserverkonfiguration
- Reduzierung der Anzahl aktiver Plugins
Quelle: https://pluginus.net/support/topic/very-slow-woof_text_filter-searches/