HUSKY - Product Filter for WooCommerce

Como Acelerar a Pesquisa de Produtos WooCommerce (Filtro de Texto HUSKY)

Se seu site tem um grande número de produtos (3000+) e a busca de produtos WooCommerce através de [woof_text_filter] está lenta, este guia ajudará você a otimizá-la.

O Problema

Por padrão, o HUSKY usa o método SQL JOIN para buscas, que pode se tornar lento em grandes bancos de dados. Pesquisas de texto que levam mais de 10 segundos e filtragem de categorias causando atrasos são sintomas comuns.

Solução 1: Ativar Método de Busca Rápida (post__in)

O plugin possui um método de busca mais rápido integrado que usa post__in em vez de SQL JOINs. Isso é muito mais eficiente para grandes catálogos de produtos.

Implementação

Adicione esta única linha ao arquivo functions.php do seu tema:

add_filter('woof_husky_query_post__in', '__return_true');

Resultados Esperados

  • Velocidade de busca de texto: De 10+ segundos para 1-3 segundos
  • Funciona imediatamente após adicionar o código
  • Nenhuma alteração no banco de dados necessária

Solução 2: Otimizar a Filtragem de Categorias

Se a filtragem de categorias ainda estiver lenta após ativar a busca rápida, você tem duas opções:

Opção A: Adicionar Índices de Banco de Dados (Recomendado)

Os índices de banco de dados aceleram drasticamente as consultas de categoria, otimizando as tabelas term_relationships e term_taxonomy.

Adicione este código ao seu 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);
}

Como funciona:

  • Executa uma vez no primeiro carregamento da página de administração
  • Cria índices de banco de dados otimizados
  • Armazena sinalizador de conclusão para evitar reexecução

Resultados Esperados:

  • Filtragem de categorias: De vários segundos para < 1 segundo
  • Solução permanente (índices permanecem após remoção do código)

Opção B: Armazenar em Cache Consultas de Categoria

Se você não pode modificar a estrutura do banco de dados ou quer uma abordagem diferente, o cache fornece uma boa melhoria de desempenho.

Adicione este código ao seu 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);
    }
}

Como funciona:

  • Armazena em cache os resultados da filtragem de categorias por 1 hora
  • Gera chave de cache única por combinação de filtro
  • Retorna IDs de produtos em cache em buscas idênticas subsequentes

Resultados Esperados:

  • Primeira busca: Velocidade normal
  • Buscas idênticas subsequentes: Resultados quase instantâneos
  • Cache expira automaticamente após 1 hora

Qual Solução Usar?

Para Problemas de Velocidade na Busca de Texto:

Use a Solução 1 (filtro post__in) – esta é a correção mais fácil e eficaz.

Para Problemas de Velocidade na Filtragem de Categorias:

Use a Solução 2A (Índices de Banco de Dados) se:

  • Você tem acesso ao banco de dados
  • Você quer otimização permanente
  • Você precisa de velocidade consistente para todas as consultas

Use a Solução 2B (Cache) se:

  • Você não pode modificar a estrutura do banco de dados
  • Seus usuários frequentemente repetem as mesmas buscas
  • Você tem padrões de busca variáveis

Combinando Soluções:

Você pode usar todas as soluções juntas com segurança para obter o máximo desempenho:

  1. Ativar o método post__in (Solução 1)
  2. Adicionar índices de banco de dados (Solução 2A)
  3. Adicionar cache (Solução 2B) – opcional para aumento extra

Notas Importantes

  • Tema Filho Necessário: Sempre adicione código ao functions.php de um tema filho para evitar perda durante atualizações do tema
  • Backup Primeiro: Antes de adicionar índices de banco de dados, faça backup do seu banco de dados
  • Ambiente de Teste: Teste as soluções em um site de staging primeiro, se possível
  • Limpeza de Cache: Se usar a solução de cache, lembre-se de que os resultados em cache são atualizados a cada hora

Testando Suas Alterações

  1. Adicione o código ao seu functions.php
  2. Limpe todos os caches (navegador, WordPress, servidor)
  3. Teste uma busca que estava lenta anteriormente
  4. Monitore a melhoria no tempo de busca

Otimização do Lado do Servidor

Se essas soluções não fornecerem melhoria suficiente, considere:

  • Migrar para uma hospedagem mais rápida
  • Ativar cache de objetos (Redis/Memcached)
  • Otimizar a configuração do servidor de banco de dados
  • Reduzir o número de plugins ativos

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