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:
- Ativar o método
post__in(Solução 1) - Adicionar índices de banco de dados (Solução 2A)
- Adicionar cache (Solução 2B) – opcional para aumento extra
Notas Importantes
- Tema Filho Necessário: Sempre adicione código ao
functions.phpde 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
- Adicione o código ao seu
functions.php - Limpe todos os caches (navegador, WordPress, servidor)
- Teste uma busca que estava lenta anteriormente
- 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/