# Como corrigir o cache do WP Rocket que quebra listings do JetEngine no WordPress

O cache do WP Rocket que quebra listings do JetEngine acontece quando otimizacoes como Delay JavaScript Execution, Remove Unused CSS e o cache de página servem uma versão estática que não executa o JavaScript ou não carrega o CSS de que o Listing Grid e o JetSmartFilters precisam para renderizar conteúdo dinâmico.

## O que é cache do WP Rocket que quebra listings do JetEngine?

O cache do WP Rocket que quebra listings do JetEngine e o conjunto de sintomas em que componentes dinâmicos do JetEngine deixam de funcionar depois que o WP Rocket e ativado ou tem otimizacoes ligadas. O JetEngine renderiza Listing Grids, JetSmartFilters e carregamentos por AJAX dependendo de scripts JavaScript e folhas de estilo especificas que precisam estar presentes e executar no navegador. Quando o WP Rocket adia, remove ou serve uma versão cacheada desses recursos, o listing aparece vazio, sem estilo ou simplesmente não reage aos filtros.

A origem não e um bug do JetEngine nem do WP Rocket isoladamente, mas a forma como as otimizacoes interagem com conteúdo gerado no carregamento. Segundo a documentação do WP Rocket, o recurso Delay JavaScript Execution adia todos os arquivos e scripts inline até haver uma interacao do usuário, e o Remove Unused CSS gera o CSS a partir das primeiras visitas, podendo descartar estilos de elementos carregados depois por AJAX. Em listings que dependem de paginação AJAX, ordenacao ou filtros, esse adiamento e essa remoção removem exatamente os recursos que dao vida ao componente. A correção passa por excluir os scripts e estilos do JetEngine dessas otimizacoes em vez de desligar o cache inteiro.

## Como identificar

- O Listing Grid do JetEngine aparece vazio ou so com o esqueleto de carregamento ('loading') na página cacheada, mas funciona normalmente quando o cache da página e limpo ou você esta logado como admin.
- Os filtros do JetSmartFilters não reagem ao clique: a lista não atualiza e no console do navegador surge um erro de JavaScript ou uma requisicao AJAX que nunca dispara.
- A paginação AJAX ('Load More' ou numerada) do listing não avança de página e fica presa na primeira leva de itens.
- O listing carrega sem estilo (cards empilhados, grid sem colunas), sinal de que o CSS do componente foi removido pela otimização de CSS.
- O conteúdo dinâmico so aparece depois que o visitante clica, rola ou move o mouse na página, indicando que o script ficou retido pelo Delay JavaScript Execution até a interacao.

**Antes de começar:** Antes de editar o functions.php ou alterar as exclusoes do WP Rocket em producao, faça backup do site (arquivos e banco de dados) ou aplique as mudancas primeiro em um ambiente de staging, para reverter caso o listing ou outra parte do site quebre após limpar o cache.

## Como prevenir

- Sempre que ativar uma nova otimização do WP Rocket (Delay JavaScript, Remove Unused CSS, combinar JS), teste as páginas com Listing Grid e filtros em uma janela anonima antes de manter a configuração em producao.
- Mantenha uma lista das exclusoes de jet-engine e jet-smart-filters documentada, para reaplicar rapidamente após qualquer reset ou reconfiguracao do WP Rocket.
- Valide mudancas de cache primeiro em staging, já que o Remove Unused CSS e o cache de página se comportam diferente entre admin logado e visitante anonimo.
- Prefira excluir scripts e estilos especificos do JetEngine em vez de desligar a otimização inteira, para não perder o ganho de performance no restante do site.

Erros relacionados

- [Como resolver cache que não limpa no WordPress](https://full.services/wp-fixer/corrigir-cache-nao-limpa-wordpress/)
- [Como corrigir Eliminate render-blocking resources](https://full.services/wp-fixer/corrigir-render-blocking-resources-wordpress/)
- [Como corrigir imagens sem lazy loading no WordPress](https://full.services/wp-fixer/corrigir-lazy-loading-imagens-wordpress/)

## Causa

- O Delay JavaScript Execution do WP Rocket adia todos os scripts até a primeira interacao do usuário; como o Listing Grid e o JetSmartFilters dependem de JavaScript para montar e atualizar a lista, o componente fica vazio até o visitante interagir com a página.
- O Remove Unused CSS gera o CSS usado a partir das primeiras visitas e descarta o resto; o estilo do listing carregado por AJAX não existe nesse momento de varredura, entao a folha de estilo do componente e removida e o grid renderiza sem layout.
- A minificacao ou combinacao de JavaScript do WP Rocket altera ou agrupa o script do JetEngine ou do JetSmartFilters, quebrando a chamada AJAX que busca os itens e filtros do listing.
- O cache de página serve um HTML estático capturado quando o listing ainda estava vazio (antes do AJAX preencher), de modo que todo visitante recebe a versão sem itens até o cache daquela URL ser regenerado.
- O Lazy Load do WP Rocket adia imagens e iframes dos itens do listing, e como esses elementos são injetados por AJAX depois do carregamento, ficam sem o atributo de lazy load esperado e não aparecem ou quebram a altura dos cards.

## Como resolver

1. Confirme que o problema e de otimização, não do listing: Limpe o cache do WP Rocket e abra a página do listing em uma aba anonima. Se o listing carrega certo logo após a limpeza e quebra de novo na próxima visita cacheada, o culpado e uma otimização do WP Rocket, não a configuração do JetEngine.

```
Painel WP -> WP Rocket -> Painel -> Limpar cache
Abra a URL do listing em uma janela anonima e observe se ele carrega corretamente na primeira visita
```

2. Exclua os scripts do JetEngine do Delay JavaScript Execution: Em File Optimization, no campo de exclusoes do Delay JavaScript Execution, adicione as palavras-chave dos scripts do JetEngine e do JetSmartFilters para que eles executem no carregamento e não fiquem retidos até a interacao. Use trechos do caminho do arquivo como palavra-chave.

```
Painel WP -> WP Rocket -> File Optimization -> Delay JavaScript Execution
No campo 'Excluded JavaScript Files' adicione: jet-engine
Adicione também: jet-smart-filters
Salve e limpe o cache
```

3. Protega o CSS do listing no Remove Unused CSS: Ainda em File Optimization, adicione os identificadores das folhas de estilo do JetEngine ao CSS Safelist do Remove Unused CSS, para que o estilo do listing não seja descartado quando o componente e carregado por AJAX depois da varredura inicial.

```
Painel WP -> WP Rocket -> File Optimization -> Optimize CSS delivery -> Remove Unused CSS
No campo 'CSS Safelist' adicione um handle/seletor por linha: jet-engine
Adicione também: jet-smart-filters
Salve e limpe o cache
```

4. Adicione o atributo nowprocket via filtro quando precisar de precisao: Se o listing ainda depender de um script inline específico, marque esse script com o atributo nowprocket ou exclua o inline pelo filtro do WP Rocket, usando uma palavra única presente so naquele script para não afetar os demais. Aplique pela função do tema ou por um snippet (veja o bloco de código).

```
Edite functions.php do tema filho ou use um plugin de snippets
Use o filtro rocket_defer_inline_exclusions com uma palavra única do script do listing
Salve, limpe o cache do WP Rocket e recarregue a página
```

5. Exclua a URL do listing do cache se ela for muito dinâmica: Quando a página depende de estado por visitante (filtros na URL, resultados personalizados), exclua o padrão de URL do cache de página do WP Rocket para que cada visita gere o listing fresco, em vez de servir um HTML capturado vazio.

```
Painel WP -> WP Rocket -> Advanced Rules -> Never Cache URL(s)
Adicione o caminho do listing, por exemplo: /catalogo/(.*)
Salve e limpe o cache
```


## Código

```php
<?php
/**
 * Exclui scripts inline do JetEngine / JetSmartFilters do adiamento
 * do WP Rocket (Delay/Defer), evitando que o Listing Grid e os
 * filtros fiquem inertes ate a interacao do usuario.
 */
add_filter( 'rocket_defer_inline_exclusions', 'full_jetengine_inline_exclusions' );
function full_jetengine_inline_exclusions( $exclusions ) {
    // Palavras unicas presentes nos scripts inline do JetEngine.
    $exclusions[] = 'JetEngineSettings';
    $exclusions[] = 'JetSmartFilterSettings';
    return $exclusions;
}

/**
 * Exclui arquivos do JetEngine do Delay JavaScript Execution
 * por palavra-chave do caminho, complementando o painel.
 */
add_filter( 'rocket_delay_js_exclusions', 'full_jetengine_delay_exclusions' );
function full_jetengine_delay_exclusions( $excluded ) {
    $excluded[] = 'jet-engine';
    $excluded[] = 'jet-smart-filters';
    return $excluded;
}
```

## Perguntas frequentes

### Por que o Listing Grid do JetEngine fica vazio depois que ativei o WP Rocket

Quase sempre e o Delay JavaScript Execution segurando os scripts do JetEngine até o visitante interagir, ou o cache de página servindo um HTML capturado antes do AJAX preencher a lista. Exclua jet-engine do Delay JavaScript e limpe o cache para o listing voltar a carregar.

### O JetSmartFilters parou de filtrar com o WP Rocket ligado, o que fazer

O JetSmartFilters depende de uma chamada AJAX em JavaScript que pode estar adiada ou combinada de forma incorreta. Adicione jet-smart-filters as exclusoes do Delay JavaScript Execution e, se usar combinar JS, exclua também esse script. Limpe o cache e teste o filtro.

### Preciso desligar o WP Rocket inteiro para o JetEngine funcionar

Não. Desligar o cache resolve mas custa a performance do site todo. O recomendado e excluir apenas os scripts e estilos do JetEngine das otimizacoes especificas, mantendo o cache de página e as demais otimizacoes ativas no restante do site.

### O que e o CSS Safelist do WP Rocket e por que usar com o JetEngine

O CSS Safelist e o campo onde você informa estilos que o Remove Unused CSS deve preservar. Como o estilo do listing pode ser carregado por AJAX após a varredura inicial, adicionar os handles do JetEngine ao Safelist evita que o WP Rocket descarte o CSS e deixe o grid sem layout.

### Para que serve o atributo nowprocket no contexto do JetEngine

O atributo nowprocket marca um script para não ser adiado pelo Delay JavaScript Execution. Segundo a doc do WP Rocket, você adiciona nowprocket na tag do script que precisa executar de imediato, útil quando um script inline específico do listing não pode esperar pela interacao do usuário.

### Como excluir a página do listing do cache quando ela e muito dinâmica

Em Advanced Rules, no campo Never Cache URL(s), adicione o caminho da página ou um padrão com curinga, como o caminho do catalogo seguido de (.*). Assim cada visita gera o listing fresco, em vez de receber uma versão estática capturada vazia.

### As imagens dos itens do listing somem com o Lazy Load ativo, e normal

Pode acontecer porque os itens entram por AJAX depois do carregamento e não recebem o tratamento de lazy load esperado. Exclua as imagens do listing do Lazy Load nas opções de Media do WP Rocket ou use o controle do JetEngine para essas imagens, e limpe o cache em seguida.

### Como saber qual otimização do WP Rocket esta quebrando o listing

Desative uma otimização por vez (primeiro Delay JavaScript, depois Remove Unused CSS, depois combinar JS), limpando o cache e recarregando a página em aba anonima a cada teste. Quando o listing voltar, a última opção desligada e a culpada, e ai você aplica a exclusão específica em vez de manter tudo desativado.

**Fonte:** [WP Rocket Docs — Delay JavaScript Execution and exclusions](https://docs.wp-rocket.me/article/1349-rucss-list-of-compatibility-exclusions)
