Come accelerare la ricerca prodotti WooCommerce (filtro di testo HUSKY)
Se il tuo sito ha un gran numero di prodotti (3000+) e la ricerca prodotti WooCommerce tramite [woof_text_filter] è lenta, questa guida ti aiuterà a ottimizzarla.
Il Problema
Per impostazione predefinita, HUSKY utilizza il metodo SQL JOIN per le ricerche, che può diventare lento su database di grandi dimensioni. Ricerche testuali che richiedono 10+ secondi e filtraggio per categoria che causa ritardi sono sintomi comuni.
Soluzione 1: Abilita il 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 file functions.php del tuo tema:
add_filter('woof_husky_query_post__in', '__return_true');
Risultati Attesi
- Velocità di ricerca testuale: Da 10+ secondi a 1-3 secondi
- Funziona immediatamente dopo l'aggiunta del codice
- Nessuna modifica al database richiesta
Soluzione 2: Ottimizza il Filtraggio per Categoria
Se il filtraggio per categoria è ancora lento dopo aver abilitato la ricerca veloce, hai due opzioni:
Opzione A: Aggiungi Indici del Database (Consigliato)
Gli indici del database accelerano notevolmente le query per categoria ottimizzando le tabelle term_relationships e term_taxonomy.
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:
- Viene eseguito una volta al primo caricamento della pagina di amministrazione
- Crea indici ottimizzati del database
- Memorizza un flag di completamento per evitare di eseguirlo nuovamente
Risultati Attesi:
- Filtraggio per categoria: Da diversi secondi a < 1 secondo
- Soluzione permanente (gli indici rimangono dopo la rimozione del codice)
Opzione B: Memorizza nella Cache le Query per Categoria
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:
- Memorizza nella cache i risultati del filtro categoria per 1 ora
- Genera una chiave di cache unica per combinazione di filtri
- Restituisce gli ID dei prodotti in cache nelle successive ricerche identiche
Risultati Attesi:
- Prima ricerca: Velocità normale
- Ricerche identiche successive: Risultati quasi istantanei
- La cache scade automaticamente dopo 1 ora
Quale Soluzione Usare?
Per Problemi di Velocità di Ricerca Testuale:
Usa la Soluzione 1 (filtro post__in) – è la soluzione più semplice ed efficace.
Per Problemi di Velocità di Filtraggio per Categoria:
Usa la Soluzione 2A (Indici del Database) se:
- Hai accesso al database
- Desideri un'ottimizzazione permanente
- Hai bisogno di velocità costante per tutte le query
Usa la Soluzione 2B (Cache) se:
- Non puoi modificare la struttura del database
- I tuoi utenti ripetono spesso le stesse ricerche
- Hai schemi di ricerca variabili
Combinare le Soluzioni:
Puoi usare tutte le soluzioni insieme in sicurezza per prestazioni massime:
- Abilita il metodo
post__in(Soluzione 1) - Aggiungi indici del database (Soluzione 2A)
- Aggiungi cache (Soluzione 2B) – opzionale per un boost extra
Note Importanti
- Child Theme Richiesto: Aggiungi sempre il codice al
functions.phpdi un child theme per evitare perdite durante gli aggiornamenti del tema - Prima il Backup: Prima di aggiungere indici al database, esegui un backup del database
- Ambiente di Test: Testa le soluzioni prima su un sito di staging se possibile
- Pulizia Cache: Se usi una soluzione di cache, ricorda che i risultati in cache si aggiornano ogni ora
Testare le Modifiche
- Aggiungi il codice al tuo
functions.php - Pulisci tutte le cache (browser, WordPress, server)
- Testa una ricerca che era precedentemente lenta
- Monitora il miglioramento del tempo di ricerca
Ottimizzazione Lato Server
Se queste soluzioni non forniscono un miglioramento sufficiente, considera:
- Passare a un hosting più veloce
- Abilitare la cache degli oggetti (Redis/Memcached)
- Ottimizzare la configurazione del server del database
- Ridurre il numero di plugin attivi
Fonte: https://pluginus.net/support/topic/very-slow-woof_text_filter-searches/