Otimização de Desempenho: Lazy-Load Slideout para Grandes Hierarquias de Categorias
Quando você tem uma categoria pai com:
- Grande número de produtos (500-1000+)
- Hierarquia profunda de categorias (múltiplos níveis de subcategorias)
- Recálculo Dinâmico ativado
O filtro de produtos pode gerar centenas de consultas SQL a cada carregamento de página, mesmo que o usuário nunca use o filtro. Isso causa:
- Carregamento lento da página (10+ segundos)
- Erros 504 Gateway Timeout
- Alta carga no servidor
- Experiência do usuário ruim
Por que isso acontece
Com o Recount Dinâmico ativado, o WOOF deve:
- Processar recursivamente todas as categorias filhas
- Executar consultas SQL para cada termo para contar produtos
- Calcular contagens considerando o contexto da categoria atual
Exemplo: Uma categoria “Óculos de Sol” com subcategorias (Homem → Mulher → Formatos → Marcas) gera uma carga de consulta massiva.
Soluções Tradicionais (Insuficientes)
❌ Ocultando slideout com regras CSS/display – O filtro ainda é processado no servidor
❌ Desativando a Recontagem Dinâmica – Perde funcionalidade importante
❌ Removendo opções de filtro – Os usuários não conseguem filtrar corretamente
❌ Índices de banco de dados – Melhoria menor, não resolve a causa raiz
A Solução Ótima: Slideout Lazy-Load
Conceito Chave: Carregue o filtro SOMENTE quando o usuário realmente abrir o slideout.
✅ Página carrega instantaneamente (sem processamento de filtro)
✅ Filtro funciona perfeitamente quando necessário
✅ Sem desperdício de recursos do servidor
✅ Perfeito para bots e navegadores casuais
✅ Mantém toda a funcionalidade do filtro intacta
Implementação
Adicione o seguinte código ao seu tema functions.php:
/**
* WOOF Lazy-Load Slideout Filter
* Loads filter only when user clicks to open slideout
* Solves performance issues with deep category hierarchies
*/
add_action('wp_footer', function () {
// Only on product category pages (optional - remove condition to show everywhere)
if (!is_product_category()) {
//return;
}
?>
<!-- Slideout Trigger Button -->
<div id="woof-slideout-trigger" style="position: fixed; right: 0; top: 50%; transform: translateY(-50%); z-index: 9999; cursor: pointer; background: #333; color: #fff; padding: 15px 10px; border-radius: 5px 0 0 5px; font-weight: bold; writing-mode: vertical-rl; text-orientation: mixed;">
FILTERS
</div>
<!-- Slideout Panel -->
<div id="woof-slideout-panel" style="position: fixed; right: -350px; top: 0; width: 350px; height: 100%; background: #fff; box-shadow: -2px 0 10px rgba(0,0,0,0.3); z-index: 9998; transition: right 0.3s ease; overflow-y: auto; padding: 20px;">
<!-- Close Button -->
<div style="text-align: right; margin-bottom: 15px;">
<span id="woof-slideout-close" style="cursor: pointer; font-size: 24px; font-weight: bold;">✖</span>
</div>
<!-- WOOF Filter with autohide - loads only on first click -->
<?php echo do_shortcode('[woof autohide=0 start_filtering_btn=1]'); ?>
</div>
<!-- Background Overlay -->
<div id="woof-slideout-overlay" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 9997; display: none;"></div>
<script>
jQuery(document).ready(function ($) {
var $trigger = $('#woof-slideout-trigger');
var $panel = $('#woof-slideout-panel');
var $overlay = $('#woof-slideout-overlay');
var $close = $('#woof-slideout-close');
var filterLoaded = false;
// Open slideout
$trigger.on('click', function () {
$panel.css('right', '0');
$overlay.fadeIn(300);
// Auto-trigger WOOF "Start Filtering" button on first open
if (!filterLoaded) {
setTimeout(function () {
var $woofBtn = $('.woof_start_filtering_btn');
if ($woofBtn.length) {
$woofBtn.trigger('click');
// Hide the button after triggering
$woofBtn.hide();
filterLoaded = true;
}
}, 500);
}
});
// Close slideout
function closeSlideout() {
$panel.css('right', '-350px');
$overlay.fadeOut(300);
}
$close.on('click', closeSlideout);
$overlay.on('click', closeSlideout);
});
</script>
<?php
}, 999);
Etapas de configuração
- Desabilite seu slideout atual nas configurações do WOOF se estiver ativado
- Adicione o código acima para
functions.phpdo seu tema ativo - Mantenha estas configurações do WOOF ativadas:
- Cache de contagem dinâmica: Sim
- Cache de termos: Sim
- Ocultar termos vazios: Sim
- Recalculo Dinâmico: Sim
- Personalização opcional:
- Ajuste a largura do slideout: mude
width: 350pxeright: -350px - Mudar posição do botão: modificar
top: 50% - Personalizar cores: atualize
backgroundecolorvalores - Faça funcionar em todo o site: remova o
if (!is_product_category())condição
- Ajuste a largura do slideout: mude
Como Funciona
- Carregamentos de página: Apenas o botão de gatilho é renderizado (sem processamento de filtro)
- Usuário clica no botão: Slideout abre, overlay aparece
- Primeiro abra apenas: O JavaScript clica automaticamente no botão oculto "Iniciar Filtragem"
- Filtro carrega: WOOF processa todas as consultas e exibe as opções de filtro
- Aberturas subsequentes: O filtro já está carregado, abre instantaneamente
Resultados do Mundo Real
Antes:
- Carregamento da página: 10-15 segundos (ou timeout 504)
- 500+ consultas SQL por visualização de página
- Alta taxa de rejeição
Depois:
- Carregamento da página: < 2 segundos
- O filtro carrega em ~3 segundos (somente quando solicitado)
- ~50% de redução na carga do servidor (muitos usuários nunca abrem o filtro)
Compatibilidade
✅ Funciona com todas as versões do WOOF
✅ Compatível com cache de página (WP Rocket, LiteSpeed, etc.)
✅ Amigável para dispositivos móveis
✅ Funciona com qualquer tema WordPress
Customização Avançada
Combine o estilo do seu tema:
/* Add to your theme's CSS */
#woof-slideout-trigger {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
font-family: 'Your Theme Font', sans-serif;
letter-spacing: 2px;
}
#woof-slideout-panel {
background: #f8f9fa;
font-family: 'Your Theme Font', sans-serif;
}
#woof-slideout-trigger:hover {
transform: translateY(-50%) scale(1.05);
}
Deslizante lateral esquerdo:
Altere estes valores:
right: -350px → left: -350px
right: 0 → left: 0
right: -350px → left: -350px
Quando Usar Esta Solução
Use slide-out lazy-load quando:
- Categoria com hierarquia profunda (3+ níveis)
- 500+ produtos na categoria
- Recálculo Dinâmico é necessário
- Tempo de carregamento da página > 5 segundos
- Experimentando timeouts 504
Alternativa para Filtro de Barra Lateral
Se você prefere barra lateral em vez de slideout, use:
echo do_shortcode('[woof autohide=1 start_filtering_btn=1]');
Isso cria um botão “Iniciar Filtragem” em sua barra lateral que carrega o filtro ao clicar.
Esta solução oferece o melhor equilíbrio entre performance e funcionalidade, garantindo carregamentos rápidos de página, mantendo capacidades de filtragem completas para usuários que precisam delas.