# Como corrigir o erro de JavaScript no JetSmartFilters no WordPress

O erro de JavaScript no JetSmartFilters acontece quando o script de filtragem trava no navegador por conflito de scripts, provider mal configurado ou cache servindo um arquivo antigo, fazendo os filtros pararem de aplicar e o console exibir mensagens de erro.

## O que é erro de JavaScript no JetSmartFilters?

O erro de JavaScript no JetSmartFilters e a falha do script que aplica os filtros no navegador. O JetSmartFilters depende de um arquivo JavaScript próprio, que escuta a interacao do visitante com o filtro, monta a requisicao e atualiza o provider (o Listing Grid, Products Grid ou widget que mostra os resultados) sem recarregar a página inteira no modo AJAX. Quando esse script lanca uma excecao, o filtro deixa de responder: o clique não faz nada, os resultados não mudam e o console do navegador registra o erro.

O sintoma central e o filtro parar de funcionar com uma mensagem visivel apenas no console (F12 do navegador), e não na tela. O problema raramente esta no servidor: na maioria dos casos e um conflito entre o script do JetSmartFilters e outro plugin ou tema, um provider apontando para um Query ID que não existe, ou um plugin de cache e minificacao entregando uma versão quebrada do arquivo. Por isso o conserto passa por isolar o conflito, conferir a ligacao entre filtro e provider e limpar a entrega dos assets.

## Como identificar

- O console do navegador (F12) exibe 'Uncaught TypeError' ou 'is not a function' apontando para o arquivo jet-filters.js ou jet-smart-filters.js logo ao interagir com o filtro.
- O filtro não aplica nada ao clicar: a lista de resultados não muda e nenhuma requisicao AJAX aparece na aba Network do navegador.
- A mensagem 'Uncaught ReferenceError: jQuery is not defined' aparece no console quando outro plugin altera a ordem de carregamento dos scripts.
- O console registra erro de sintaxe ('Unexpected token') vindo do arquivo de filtros, sinal de minificacao agressiva ou de um arquivo cacheado e truncado.
- Os filtros funcionam no editor do Elementor mas quebram no frontend, com o console acusando script duplicado ou variavel já declarada.

**Antes de começar:** Antes de atualizar plugins, desativar cache ou trocar o tema em producao, faça um backup completo do site (arquivos e banco de dados) ou repita os testes primeiro em um ambiente de staging, para reverter caso a página dos filtros pare de carregar.

## Como prevenir

- Mantenha JetSmartFilters e JetEngine sempre na mesma geração de versão estavel, validando a atualização em staging antes de subir para producao.
- No plugin de cache, exclua os scripts do JetSmartFilters da minificacao, combinacao e do delay de JavaScript, evitando que a otimização trunque ou atrase o arquivo.
- Padronize um Query ID único e documentado para cada Listing/Products Grid e replique exatamente esse valor no filtro correspondente.
- Evite duplicar o mesmo filtro ou template em popup e página ao mesmo tempo, para não redeclarar o script do JetSmartFilters na mesma tela.
- Após qualquer mudanca de provider ou de fonte de dados, regenere o indexador do JetSmartFilters para manter o contrato de dados consistente.

Erros relacionados

- [Como corrigir o JetSmartFilters AJAX que não retorna resultados](https://full.services/wp-fixer/corrigir-jetsmartfilters-ajax-sem-resultados/)
- [Como corrigir o JetSmartFilters que não filtra dados dinâmicos](https://full.services/wp-fixer/corrigir-jetsmartfilters-nao-filtra-jetengine/)
- [Como corrigir o erro de conexão entre JetEngine e Elementor](https://full.services/wp-fixer/corrigir-conexao-jetengine-elementor/)

## Causa

- Outro plugin ou o tema carrega uma versão diferente do jQuery, ou enfileira scripts fora de ordem, e o jet-filters.js executa antes de suas dependencias estarem prontas, lançando 'jQuery is not defined' ou 'is not a function'.
- Um plugin de cache com minificacao ou combinacao de JavaScript (como o recurso de combine/minify do WP Rocket ou Autoptimize) corrompe ou trunca o script do JetSmartFilters, gerando 'Unexpected token' no console.
- O widget de filtro aponta para um provider e Query ID que não correspondem ao Listing Grid ou Products Grid da página, entao o script não encontra o alvo no DOM e falha ao montar a requisicao.
- O Optimize DOM e Markup ou o recurso de delay/defer de JavaScript do plugin de performance adia o script do JetSmartFilters depois do evento que ele precisa escutar, deixando o filtro inerte e o handler sem registrar.
- Ha duas instancias do mesmo filtro ou do mesmo script JetSmartFilters na página (template duplicado, popup e página juntos), causando redeclaracao de variavel e excecao no console ao inicializar.
- Uma versão desatualizada do JetSmartFilters ou do JetEngine deixa o indexador e o provider em contrato incompativel, e o JavaScript quebra ao tentar ler uma estrutura de dados que mudou entre versões.

## Como resolver

1. Leia a mensagem exata no console do navegador: Abra o console antes de tudo para saber qual erro tratar. A mensagem diz o tipo do erro e o arquivo de origem, o que separa conflito de jQuery, script truncado por cache e provider sem alvo. Anote a linha indicada.

```
Abra a página do filtro e pressione F12 -> aba Console
Interaja com o filtro e leia a mensagem (TypeError, ReferenceError ou Unexpected token)
Na aba Network, filtre por 'Fetch/XHR' e confira se a requisicao do filtro sai ao clicar
```

2. Desligue cache, minificacao e delay de JavaScript: Conflitos de assets são a causa mais comum. Limpe o cache e desative temporariamente combine/minify e delay de JavaScript do plugin de performance, depois recarregue a página com cache vazio para ver se o erro some.

```
Painel WP -> plugin de cache (ex.: WP Rocket) -> File Optimization -> desligue Combine e Minify JavaScript
Desative Delay JavaScript Execution e remova o jet-filters.js de qualquer exclusão mal feita
Limpe todo o cache e recarregue a página com Ctrl+Shift+R (hard refresh)
```

3. Confira o provider e o Query ID do filtro: O filtro precisa apontar para o mesmo provider e Query ID do Listing/Products Grid da página. Se não casam, o script não acha o alvo no DOM e quebra. Abra o widget do filtro e o do grid e compare os dois campos.

```
Edite a página -> abra o widget de filtro -> confira o campo 'This filter for' (provider)
Confirme que o 'Query ID' do filtro e identico ao 'Query ID' do Listing Grid ou Products Grid
Se usar mais de um grid, defina um Query ID único em cada e replique no filtro correspondente
```

4. Isole o conflito desativando plugins e trocando o tema: Se o erro persiste sem cache, e conflito de código. Desative os outros plugins um a um e troque para um tema padrão, recarregando a página e o console a cada teste até o erro desaparecer, identificando o culpado.

```
Painel WP -> Plugins -> desative os demais plugins um a um (mantenha JetSmartFilters e JetEngine)
Painel WP -> Aparencia -> Temas -> ative um tema padrão (ex.: Twenty Twenty-Four)
Recarregue a página, repita a interacao e observe o console após cada mudanca
```

5. Atualize JetSmartFilters e JetEngine e recrie o indexador: Versões diferentes do JetSmartFilters e do JetEngine podem deixar o contrato de dados incompativel. Atualize ambos para a versão estavel mais recente e, se usar a indexação de filtros, regenere o indexador após atualizar.

```
Painel WP -> Plugins -> atualize JetSmartFilters e JetEngine para a versão estavel mais recente
Painel WP -> JetSmartFilters -> Settings -> ative e regenere o Indexer (se estiver em uso)
Recarregue a página e confira se o console fica limpo ao aplicar o filtro
```


## Código

```php
<?php
/**
 * Exclui os scripts do JetSmartFilters do delay/defer de plugins de cache
 * via o filtro do WP Rocket, evitando que o arquivo de filtros seja adiado.
 */
add_filter( 'rocket_delay_js_exclusions', 'full_jsf_keep_filters_scripts' );
function full_jsf_keep_filters_scripts( $excluded ) {
    $excluded[] = 'jet-smart-filters';
    $excluded[] = 'jet-filters';
    return $excluded;
}
```

## Perguntas frequentes

### Por que o JetSmartFilters para de aplicar mas não aparece erro na tela

Porque a falha e do JavaScript, que so registra a mensagem no console do navegador. Abra o console com F12, interaja com o filtro e leia o erro (TypeError, ReferenceError ou Unexpected token) para saber se a causa e conflito de script, cache ou provider errado.

### O cache e a minificacao podem quebrar o JetSmartFilters

Sim. Combinar, minificar ou atrasar o JavaScript pode truncar ou adiar o arquivo de filtros, gerando 'Unexpected token' no console. Exclua os scripts do JetSmartFilters dessas otimizacoes, limpe o cache e recarregue a página com hard refresh para confirmar.

### Como o Query ID influencia o erro de JavaScript do filtro

O filtro usa o provider e o Query ID para encontrar o grid de resultados no DOM. Se o Query ID do filtro não for identico ao do Listing Grid ou Products Grid, o script não acha o alvo e falha. Confira os dois campos e iguale os valores.

### O que significa 'jQuery is not defined' no console com JetSmartFilters

Significa que o script de filtros rodou antes do jQuery carregar, geralmente por outro plugin reordenar os assets. Desative os plugins um a um para achar o que muda a ordem de carregamento e evite mover o jQuery para o rodape sem necessidade.

### Por que o filtro funciona no editor do Elementor mas quebra no frontend

O editor carrega os scripts de forma diferente do frontend. No site publicado pode haver script duplicado, cache servindo arquivo antigo ou outro plugin entrando em conflito. Teste o frontend com cache limpo e isole os plugins para identificar a diferenca.

### Preciso regenerar o indexador depois de atualizar o JetSmartFilters

Se você usa a indexação de filtros, sim. Após atualizar JetSmartFilters ou JetEngine, regenere o indexador em Settings para que o contrato de dados volte a bater com o provider e o JavaScript pare de quebrar ao ler a estrutura.

### Como saber se o erro e do JetSmartFilters ou de outro plugin

Desative os demais plugins um a um e troque para um tema padrão, recarregando a página e o console a cada teste. Se o filtro voltar a aplicar sem erro, reative os itens até encontrar o plugin ou tema que entra em conflito com o script.

**Fonte:** [Crocoblock — JetSmartFilters Knowledge Base](https://crocoblock.com/knowledge-base/jetsmartfilters/)
