Como corrigir o JetSmartFilters AJAX que não retorna resultados
O que é o JetSmartFilters AJAX que não retorna resultados?
O JetSmartFilters aplica filtros sobre um provider (Listing Grid do JetEngine, Products Grid do WooCommerce ou Query Loop) sem recarregar a página, usando uma requisicao AJAX ao admin-ajax.php do WordPress. Quando esse caminho falha, o filtro parece responder (mostra o spinner de carregamento), mas o grid volta vazio, repete os mesmos itens ou não reflete a opção marcada. O elo entre o filtro e o provider e o Query ID: se eles não casam, o filtro consulta uma query que não existe naquela página e nada e retornado.
Como identificar
- Você marca uma opção do filtro, aparece o spinner de carregamento, mas o Listing Grid volta vazio ou com a mensagem de nada encontrado.
- O filtro aplica via AJAX e o grid não muda: continua exibindo os mesmos itens de antes do filtro.
- A aba Network do navegador mostra a chamada ao admin-ajax.php com action jet_smart_filters retornando 500, 403 ou um corpo vazio.
- Os filtros funcionam com recarga de página (apply type Page reload), mas param de retornar resultados ao mudar para AJAX.
Como prevenir
- Defina um Query ID único e identico entre filtro, provider, paginação e ordenacao sempre que a página tiver mais de um Listing Grid
- Exclua o admin-ajax.php e o JavaScript do JetSmartFilters do cache e da minificacao desde a configuração inicial do site
- Após importar ou editar conteúdo em massa, reindexe os filtros quando o Indexer estiver ligado
Causa
- Query ID divergente entre o filtro e o provider: o campo Query ID do filtro tem um valor diferente do Query ID do Listing Grid, entao a chamada AJAX consulta uma query que não existe naquela página.
- Provider errado no filtro: o campo This filter for aponta para JetEngine Listing Grid quando o provider real e o WooCommerce Products Grid (ou vice-versa), e o AJAX consulta o provider que não esta na página.
- Indexer não gerado ou desatualizado: com o Indexer ligado, os contadores e o filtro dependem do indice; sem reindexar após cadastrar posts, o filtro retorna zero resultados.
- Plugin de cache ou minificacao de JavaScript quebrando a chamada ao admin-ajax.php, ou servindo a página estatica antiga em vez da resposta AJAX.
- Plugin de segurança ou regra do servidor bloqueando o admin-ajax.php para visitantes deslogados, fazendo a requisicao AJAX retornar 403 e o grid ficar vazio.
Como resolver
- Iguale o Query ID do filtro e do provider: abra o widget do filtro e o widget do Listing Grid ou Products Grid e confirme que ambos usam exatamente o mesmo Query ID, sem espacos nem caracteres especiais. Se o provider esta sem Query ID, deixe o filtro também sem Query ID.
Filtro -> aba Geral -> Query ID: produtos Listing Grid / Products Grid -> aba Geral -> Query ID: produtos - Confirme o provider correto no filtro: no widget do filtro, ajuste o campo This filter for para o provider que existe na página. JetEngine Listing Grid para listagens do JetEngine e WooCommerce Products Grid para grades de produto.
Filtro -> This filter for -> JetEngine Listing Grid Filtro -> Apply type -> AJAX - Reindexe os filtros: se o Indexer esta ligado, reconstrua o indice após qualquer mudanca de conteúdo. Sem reindexar, o filtro consulta um indice vazio e não retorna resultados.
WordPress -> SmartFilters -> Settings -> aba Indexer Reindexar o provider após cadastrar ou editar posts - Exclua o admin-ajax do cache e da minificacao: no plugin de cache, exclua a URL do admin-ajax e o JavaScript do JetSmartFilters da minificacao e combinacao, e ative a opção de não cachear URLs com parametros GET para o filtro não bater na página estatica antiga.
Excluir do cache: /wp-admin/admin-ajax.php Excluir da minificacao/combine JS: jet-smart-filters Ativar: Não cachear URLs com parametros GET (Don't cache URLs with GET parameters) - Libere o admin-ajax.php no plugin de segurança: se a aba Network mostra 403 no admin-ajax.php, confira o plugin de segurança ou o firewall e libere o endpoint para visitantes deslogados, já que o AJAX do filtro roda no front-end sem login.
Permitir POST em /wp-admin/admin-ajax.php para usuários deslogados Testar com cache e plugin de segurança desativados para isolar o bloqueio
APACHE
# .htaccess - garante que o admin-ajax.php nunca seja cacheado nem bloqueado
# Coloque no .htaccess da raiz, acima das regras do WordPress
<IfModule mod_headers.c>
<Files "admin-ajax.php">
Header set Cache-Control "no-cache, no-store, must-revalidate"
</Files>
</IfModule>
# Libera o endpoint AJAX para visitantes deslogados (o filtro roda no front-end sem login)
<Files "admin-ajax.php">
Require all granted
</Files>
Perguntas frequentes
Por que o filtro mostra o spinner mas o grid volta vazio?
Quase sempre o Query ID do filtro e diferente do Query ID do provider, entao o AJAX consulta uma query que não existe na página e retorna zero itens. Abra os dois widgets e iguale o campo Query ID; se o provider esta sem Query ID, deixe o filtro também sem valor.
O que e o Query ID do JetSmartFilters?
E um identificador de texto que liga o filtro ao provider correto na página, garantindo que o filtro atualize so o Listing Grid pretendido. Ele não pode ter espacos nem caracteres especiais e precisa ser igual no filtro, no provider e nos widgets de paginação e ordenacao.
O filtro funciona com recarga, mas para no AJAX. Por que?
No modo AJAX a resposta vem do admin-ajax.php, que pode ser quebrado pela minificacao de JavaScript, servido em cache antigo, ou bloqueado por um plugin de segurança. Exclua o admin-ajax e o script do filtro do cache e da minificacao e teste com o plugin de segurança desativado.
Preciso reindexar os filtros do JetSmartFilters?
Sim, quando o Indexer esta ligado. Os contadores e o resultado dependem do indice, e ele não se atualiza sozinho após cadastrar ou editar posts. Reindexe o provider em SmartFilters -> Settings -> Indexer sempre que o conteúdo mudar para o filtro voltar a retornar resultados.
Como sei se o admin-ajax.php esta sendo bloqueado?
Abra a aba Network do navegador, aplique o filtro e olhe a requisicao para admin-ajax.php com action jet_smart_filters. Se o status for 403 ou 500, ou o corpo vier vazio, ha bloqueio do servidor ou de plugin de segurança, ou erro de PHP no provider.
Tenho dois Listing Grids e o filtro atualiza o errado. O que fazer?
Defina um Query ID único para cada grid e use o mesmo valor no filtro que deve controla-lo. Sem Query ID o filtro tenta atualizar o primeiro provider da página, o que com várias grades faz o resultado parecer vazio ou errado na grade pretendida.
O plugin de cache pode esconder os resultados do filtro?
Pode. Se a página e cacheada estaticamente, a resposta AJAX do filtro e sobreposta pela versão antiga em cache, deixando o grid sem mudar. Ative a opção de não cachear URLs com parametros GET e exclua o admin-ajax.php do cache do plugin.














