Come accelerare le ricerche del filtro testuale di WOOF
Se il tuo sito ha un gran numero di prodotti (3000+) e stai riscontrando prestazioni di ricerca lente con [woof_text_filter], questa guida ti aiuterà a ottimizzarlo.
Il problema
Per impostazione predefinita, HUSKY utilizza il metodo SQL JOIN per le ricerche, che può diventare lento su database di grandi dimensioni. Le ricerche di testo che impiegano più di 10 secondi e i ritardi nel filtraggio delle categorie sono sintomi comuni.
Soluzione 1: Abilita Metodo di Ricerca Veloce (post__in)
Il plugin ha un metodo di ricerca più veloce integrato che utilizza post__in invece di JOIN SQL. Questo è molto più efficiente per cataloghi di prodotti di grandi dimensioni.
Implementazione
Aggiungi questa singola riga al tuo tema functions.php file:
add_filter('woof_husky_query_post__in', '__return_true');
Risultati attesi
- Velocità ricerca testo: Da 10+ secondi a 1-3 secondi
- Funziona immediatamente dopo aver aggiunto il codice
- Nessuna modifica al database richiesta
Soluzione 2: Ottimizza il filtraggio delle categorie
Se il filtraggio delle categorie è ancora lento dopo aver abilitato la ricerca veloce, hai due opzioni:
Opzione A: Aggiungere Indici al Database (Consigliato)
Gli indici del database velocizzano notevolmente le query delle categorie ottimizzando il term_relationships e term_taxonomy tabelle.
Aggiungi questo codice al tuo 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);
}
Come funziona:
- Eseguito una volta al primo caricamento della pagina di amministrazione
- Crea indici del database ottimizzati
- Archivia il flag di completamento per prevenire ri-esecuzioni
Risultati attesi:
- Filtraggio per categoria: Da diversi secondi a < 1 secondo
- Soluzione permanente (gli indici rimangono dopo la rimozione del codice)
Opzione B: Caching delle Query delle Categorie
Se non puoi modificare la struttura del database o desideri un approccio diverso, la cache offre un buon miglioramento delle prestazioni.
Aggiungi questo codice al tuo 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);
}
}
Come funziona:
- Mette in cache i risultati del filtro per categoria per 1 ora
- Genera una chiave cache univoca per ogni combinazione di filtri
- Restituisce ID prodotto memorizzati nella cache per ricerche identiche successive
Risultati attesi:
- Prima ricerca: Velocità normale
- Ricerche identiche successive: Risultati quasi istantanei
- La cache scade automaticamente dopo 1 ora
Quale Soluzione Utilizzare?
Per problemi di velocità della ricerca testuale:
Usa Soluzione 1 (filtro post__in) – questa è la correzione più semplice ed efficace.
Per problemi di velocità del filtro per categoria:
Usa la Soluzione 2A (Indici del database) se:
- Hai accesso al database
- Vuoi un'ottimizzazione permanente
- Hai bisogno di una velocità costante per tutte le query
Usa la Soluzione 2B (Caching) se:
- Non puoi modificare la struttura del database
- I tuoi utenti ripetono spesso le stesse ricerche
- Hai schemi di ricerca variabili
Combinazione di Soluzioni:
Puoi usare in sicurezza tutte le soluzioni insieme per massime prestazioni:
- Abilita
post__inmetodo (Soluzione 1) - Aggiungi indici al database (Soluzione 2A)
- Aggiungi caching (Soluzione 2B) – opzionale per un boost extra
Note importanti
- Tema Child Richiesto: Aggiungi sempre il codice a un child theme
functions.phpper evitare perdite durante gli aggiornamenti del tema - Backup prima: Prima di aggiungere indici al database, esegui un backup del tuo database
- Ambiente di Test: Testa le soluzioni prima su un sito di staging, se possibile
- Pulizia Cache: Se si utilizza una soluzione di caching, ricordare che i risultati memorizzati nella cache vengono aggiornati ogni ora
Testare le tue modifiche
- Aggiungi il codice al tuo
functions.php - Cancella tutte le cache (browser, WordPress, server)
- Testa una ricerca che in precedenza era lenta
- Monitora il miglioramento del tempo di ricerca
Ottimizzazione lato server
Se queste soluzioni non forniscono miglioramenti sufficienti, considera:
- Aggiornamento a hosting più veloce
- Abilitazione del caching degli oggetti (Redis/Memcached)
- Ottimizzazione della configurazione del tuo server di database
- Riduzione del numero di plugin attivi
Fonte: https://pluginus.net/support/topic/very-slow-woof_text_filter-searches/