Como corrigir o Dynamic Visibility do JetEngine que não funciona com cache no WordPress
O que é Dynamic Visibility do JetEngine com cache?
O Dynamic Visibility do JetEngine controla, no servidor, se um widget ou bloco aparece ou some conforme condicoes como papel do usuário, usuário logado ou deslogado, valor de um campo meta, variavel de query, data ou hora. O JetEngine avalia essas condicoes em PHP a cada requisicao e decide se imprime ou não a marcacao do elemento no HTML final. Por isso a visibilidade so e correta quando o PHP roda de verdade para aquele visitante específico.
O conflito com cache surge quando um plugin de cache de página inteira, como WP Rocket, LiteSpeed Cache ou WP Super Cache, ou um cache de borda como o Cloudflare, salva o HTML já renderizado de uma visita e o entrega aos visitantes seguintes sem executar o PHP. A condicao avaliada uma única vez fica congelada na copia em cache: se a página foi cacheada para um visitante deslogado, todos passam a ver a versão do deslogado, mesmo logados. O elemento que deveria aparecer ou sumir conforme cada usuário passa a se comportar igual para todo mundo, até o cache daquela URL ser limpo.
Como identificar
- Um elemento controlado por Dynamic Visibility aparece para quem não deveria ve-lo, ou some para quem deveria, sem padrão claro entre visitantes.
- A visibilidade fica correta logo após limpar o cache, mas volta a ficar errada nas proximas visitas a mesma URL.
- Condicoes baseadas em usuário logado e deslogado mostram sempre a mesma versão da página para os dois estados.
- Blocos condicionados por papel do usuário (administrador, assinante, cliente) exibem o conteúdo do papel da primeira visita cacheada para todos os demais.
- Condicoes por data ou hora continuam mostrando o conteúdo de um momento anterior porque a página foi cacheada antes da virada do horario.
Como prevenir
- Reserve o Dynamic Visibility por usuário, papel ou login para páginas já excluidas do cache de página inteira, mantendo o restante do site cacheado para desempenho.
- Mantenha o cache desativado para usuários logados sempre que houver conteúdo personalizado por papel, evitando servir a mesma copia a estados de login diferentes.
- Documente quais URLs tem conteúdo dinâmico e mantenha-as na lista de exclusão de cache do plugin e do Cloudflare para não serem cacheadas por engano em uma futura mudanca.
- Para condicoes por data ou hora, prefira conteúdo carregado via requisicao a cada visita em vez de depender do HTML estático, ou alinhe o tempo de vida do cache a virada esperada.
Causa
- O cache de página inteira (WP Rocket, LiteSpeed Cache, WP Super Cache) salva o HTML já renderizado de uma visita e o serve aos demais sem rodar o PHP, congelando a condicao do Dynamic Visibility avaliada uma única vez.
- O cache esta ativo para usuários logados, entao a página cacheada para um papel ou para o deslogado e entregue também aos logados, quebrando condicoes por papel e por estado de login.
- Um cache de borda do Cloudflare (Cache Everything ou regra de página) guarda o HTML antes do WordPress, de modo que o PHP do JetEngine nem chega a ser executado para o visitante seguinte.
- Condicoes por variavel de query, como UTM ou parametro de URL, são ignoradas porque o cache serve a mesma copia independente da query string, a menos que essa variavel seja incluida na chave de cache.
- Condicoes por data ou hora ficam defasadas porque o HTML foi gerado e cacheado antes da virada do horario e o cache so expira após o tempo de vida configurado.
Como resolver
- Confirme que o cache e a causa: Abra a página em uma janela anonima e em uma sessao logada e compare. Se a visibilidade ficar correta logo após limpar o cache e voltar a falhar depois, o conflito e com o cache de página, não com a configuração da condicao no JetEngine.
Painel WP -> abra o plugin de cache -> Limpar cache (Clear cache) Recarregue a página logado e anonimo e compare a visibilidade do elemento - Desative o cache para usuários logados: Se as condicoes dependem de papel ou de login, garanta que páginas para usuários logados não sejam cacheadas. No WP Rocket isso e o padrão recomendado quando ha conteúdo por usuário; no LiteSpeed Cache existe a opção equivalente.
WP Rocket -> Cache -> deixe 'Cache para usuários logados' (User Cache) DESmarcado LiteSpeed Cache -> Cache -> Cache Logged-in Users -> OFF - Exclua a URL da página do cache: Para condicoes por usuário, query string, data ou hora, adicione a URL da página (ou um padrão com curinga) na lista de URLs que nunca devem ser cacheadas, forçando o PHP do JetEngine a rodar a cada visita.
WP Rocket -> Avancado (Advanced Rules) -> Never Cache URL(s) -> adicione o caminho da página Exemplo de padrão com curinga: /minha-área(.*) LiteSpeed Cache -> Cache -> Excludes -> Do Not Cache URIs -> adicione o caminho - Ajuste o cache de borda do Cloudflare: Se o Cloudflare estiver com Cache Everything ou uma Page Rule cacheando HTML, crie uma regra para não cachear a URL com conteúdo dinâmico, ou desative o Cache Everything nessa rota, para o WordPress voltar a executar o JetEngine.
Cloudflare -> Rules -> crie uma regra Bypass Cache para o caminho da página dinâmica Ou em Cache Rules defina 'Bypass cache' quando o URI casar com a página - Limpe todos os caches e revalide: Após as exclusoes, limpe o cache do plugin, do servidor e do Cloudflare para descartar copias antigas e teste novamente em sessoes diferentes (logado, deslogado, papeis distintos) até a visibilidade casar com cada condicao.
Limpe o cache do plugin (WP Rocket -> Clear cache / LiteSpeed -> Purge All) Cloudflare -> Caching -> Purge Everything Teste a página como deslogado, logado e em cada papel relevante
<?php
/**
* Forca o cache do WP Rocket a NUNCA armazenar a pagina atual
* quando ela contem conteudo do JetEngine Dynamic Visibility por usuario.
* Coloque em um plugin de site ou no functions.php do tema filho.
*/
add_filter( 'rocket_cache_reject_uri', 'full_jetengine_dv_reject_cache' );
function full_jetengine_dv_reject_cache( $uris ) {
// Caminhos (sem dominio) que dependem de Dynamic Visibility por usuario.
$uris[] = '/minha-area(.*)';
$uris[] = '/area-do-cliente(.*)';
return $uris;
}
// Garante que paginas para usuarios logados nao sejam cacheadas.
add_filter( 'rocket_cache_mandatory_cookies', '__return_empty_array' );














