HUSKY - Product Filter for WooCommerce

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:

  1. Abilita il metodo post__in (Soluzione 1)
  2. Aggiungi indici del database (Soluzione 2A)
  3. Aggiungi cache (Soluzione 2B) – opzionale per un boost extra

Note Importanti

  • Child Theme Richiesto: Aggiungi sempre il codice al functions.php di 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

  1. Aggiungi il codice al tuo functions.php
  2. Pulisci tutte le cache (browser, WordPress, server)
  3. Testa una ricerca che era precedentemente lenta
  4. 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/