# Como corrigir os Data Stores do JetEngine que não salvam dados do usuário no WordPress

O JetEngine Data Stores não salva quando o tipo de armazenamento escolhido é por sessao do navegador (Local Storage ou Cookies) e o visitante troca de dispositivo ou limpa o navegador, ou quando o tipo Users esta em uso mas o visitante não esta logado, fazendo os itens adicionados sumirem ao recarregar a página.

## O que é JetEngine Data Stores não salva?

O JetEngine Data Stores e o recurso do JetEngine que permite ao visitante guardar uma colecao pessoal de posts no site, como favoritos, lista de desejos ou itens para comparar. Cada store tem um tipo de armazenamento que define ONDE os itens ficam: Local Storage e Cookies guardam no próprio navegador do visitante, enquanto o tipo Users grava no perfil do usuário logado (na tabela wp_usermeta) e o tipo baseado em banco grava em tabela do site.

A falha de salvar aparece quando esse tipo de armazenamento não combina com o comportamento esperado. Um store em Local Storage parece não salvar porque os itens vivem so naquele navegador e somem ao limpar o cache ou trocar de aparelho. Um store do tipo Users não grava nada quando o visitante esta deslogado, porque não existe usuário ao qual associar os dados. Cache de página sobre a saida dinâmica do store e falhas na chamada AJAX de adicionar o item completam os motivos mais comuns de o JetEngine Data Stores não salvar.

## Como identificar

- O visitante clica no botão de adicionar aos favoritos, o contador atualiza, mas ao recarregar a página o item sumiu do Data Store.
- Os itens salvos aparecem em um navegador ou dispositivo, mas desaparecem quando o mesmo usuário acessa de outro aparelho ou de uma aba anonima.
- O usuário faz login e a lista de favoritos volta vazia, mesmo tendo adicionado itens antes em outra sessao.
- Em páginas com cache ativo, a Listing Grid ou contador do Data Store mostra sempre a mesma quantidade, ignorando adicoes recentes.
- No console do navegador aparece falha na requisicao admin-ajax.php (resposta 400 ou 403) no momento em que o botão de adicionar ao store e clicado.

**Antes de começar:** Antes de alterar Store Type, mexer em regras de cache ou liberar o admin-ajax.php no firewall, faça um backup do site (arquivos e banco de dados) ou teste em um ambiente de staging, pois trocar o tipo de armazenamento pode descartar as colecoes já guardadas pelos visitantes.

## Como prevenir

- Escolha o Store Type pensando no objetivo desde o inicio: por navegador (Local Storage ou Cookies) para listas temporarias e por usuário logado quando a colecao precisa seguir a conta entre dispositivos.
- Sempre exclua do cache de página as URLs que exibem Data Stores dinâmicos, evitando que estado antigo seja servido a todos os visitantes.
- Quando o store depender de conta, condicione o botão de adicionar a usuários logados para não receber cliques que não tem onde ser salvos.
- Documente o limite Max Number de cada store e revise quando o uso crescer, para que clientes ativos não percam itens ao bater o teto silenciosamente.

Erros relacionados

- [Como corrigir o Listing Grid vazio no JetEngine](https://full.services/wp-fixer/corrigir-listing-grid-vazio-jetengine/)
- [Como corrigir os Custom Post Types do JetEngine que não aparecem no frontend](https://full.services/wp-fixer/corrigir-cpt-jetengine-nao-aparece-frontend/)
- [Como corrigir o Dynamic Visibility do JetEngine que não funciona com cache](https://full.services/wp-fixer/corrigir-dynamic-visibility-jetengine-cache/)

## Causa

- O Store Type esta configurado como Local Storage ou Cookies: os itens ficam guardados apenas no navegador daquele visitante, entao trocar de dispositivo, abrir aba anonima ou limpar o navegador apaga a colecao e da a impressao de que não salvou.
- O Store Type esta como Users mas o visitante esta deslogado: sem um usuário logado o JetEngine não tem em qual perfil gravar os dados (wp_usermeta), entao a adicao não persiste e o store volta vazio ao recarregar.
- Um plugin de cache de página (como WP Rocket ou LiteSpeed) esta servindo a saida estática da Listing Grid ou do contador do store, congelando o estado anterior e escondendo os itens recem adicionados.
- A chamada AJAX de adicionar ao store falha por nonce expirado ou bloqueio de admin-ajax.php por firewall ou WAF, entao o clique no botão não chega a gravar o item no destino configurado.
- O limite Max Number de itens do store foi atingido: ao bater o teto, novos itens não entram (ou empurram os antigos), dando a impressao de que o item adicionado não foi salvo.

## Como resolver

1. Confirme o Store Type adequado ao comportamento esperado: Abra a configuração do Data Store no JetEngine e verifique o campo Store Type. Se você espera que a lista siga o usuário entre dispositivos, ela precisa estar atrelada a conta, não ao navegador. Local Storage e Cookies são por navegador e não acompanham o usuário em outro aparelho.

```
Painel WP -> JetEngine -> Data Stores -> abra o store
Localize o campo Store Type
Para colecao por dispositivo: Local Storage ou Cookies
Para colecao que segue a conta entre dispositivos: tipo baseado em usuário logado
```

2. Exija login quando o store for por usuário: Se o store grava no perfil do usuário, um visitante deslogado não tem onde os dados serem salvos. Restrinja o botão de adicionar a usuários logados ou mostre um aviso de login, para que a adicao so ocorra quando houver um usuário valido associado.

```
Painel WP -> Aparencia ou Templates -> abra o template com o botão do store
Aplique Dynamic Visibility ou condicao 'usuário logado' ao botão de adicionar
Para visitantes deslogados, exiba um link de login no lugar do botão
```

3. Exclua a página do cache para o store dinâmico: O Data Store muda por visitante, entao a página que o exibe não pode ser entregue do cache estático. Adicione a URL a lista de exclusoes do plugin de cache e limpe o cache existente para que o estado atual do store seja lido a cada acesso.

```
Painel WP -> abra as configurações do plugin de cache (ex.: WP Rocket -> Avancado)
Adicione a URL da página do store em Nunca armazenar em cache (URLs)
Salve e clique em Limpar cache
```

4. Diagnostique a falha de AJAX no clique de adicionar: Abra o console do navegador e clique no botão de adicionar para ver se a requisicao admin-ajax.php retorna erro. Resposta 403 costuma ser firewall ou WAF bloqueando, e 400 com nonce invalido indica página cacheada com nonce velho. Libere o admin-ajax.php e desative o cache na página para renovar o nonce.

```
Abra o navegador -> tecle F12 -> aba Network
Clique no botão de adicionar ao store e observe a chamada admin-ajax.php
Se 403: libere admin-ajax.php no firewall ou WAF
Se 400 (nonce): garanta que a página não esta sendo entregue do cache
```

5. Reveja o limite Max Number do store: Volte a configuração do Data Store e confira o campo de quantidade maxima de itens. Se o limite já foi atingido, eleve o número ou aceite que itens antigos são substituidos, para que novas adicoes não pareçam falhar ao bater o teto.

```
Painel WP -> JetEngine -> Data Stores -> abra o store
Localize o campo Max Number (quantidade maxima de itens)
Aumente o valor conforme a necessidade e salve
```


## Código

```php
<?php
// Exclui a pagina que exibe um JetEngine Data Store do cache do WP Rocket,
// para o estado por visitante nao ser servido estatico (favoritos somem).
add_filter( 'rocket_cache_reject_uri', 'full_jetengine_store_no_cache' );
function full_jetengine_store_no_cache( $uris ) {
    // Ajuste para o caminho real da pagina que mostra o store.
    $uris[] = '/minha-lista-de-favoritos/';
    return $uris;
}

// Garante que o botao de adicionar ao store por usuario so apareca logado.
add_filter( 'jet-engine/data-stores/can-use-store', 'full_jetengine_store_require_login' );
function full_jetengine_store_require_login( $can_use ) {
    return is_user_logged_in() ? $can_use : false;
}
```

## Perguntas frequentes

### Por que o JetEngine Data Stores não salva os itens ao recarregar a página

Na maioria das vezes o Store Type esta como Local Storage ou Cookies, que guardam a colecao apenas no navegador daquele visitante, ou esta como Users com o visitante deslogado. Ajuste o tipo de armazenamento ao comportamento que você espera e exija login quando o store for por usuário.

### Qual a diferenca entre Local Storage, Cookies e store por usuário no JetEngine

Local Storage e Cookies guardam os itens no próprio navegador do visitante, entao a lista não segue a conta em outro dispositivo. O tipo baseado em usuário grava no perfil do usuário logado, fazendo a colecao acompanhar a conta em qualquer aparelho onde ele faca login.

### O visitante precisa estar logado para o Data Store salvar

Depende do Store Type. Para stores por navegador (Local Storage ou Cookies) o login não e necessário. Para o store atrelado ao usuário o login e obrigatório, pois sem um usuário não ha perfil onde gravar os dados e a adicao não persiste.

### O cache pode fazer o JetEngine Data Stores parecer vazio

Sim. Se um plugin de cache entrega a saida estática da Listing Grid ou do contador do store, o estado fica congelado e adicoes recentes não aparecem. Exclua a URL da página do cache e limpe o cache para que o store seja lido a cada acesso.

### Por que a lista de favoritos some quando o usuário troca de dispositivo

Porque o store esta usando Local Storage ou Cookies, que vivem so no navegador onde os itens foram adicionados. Para a lista acompanhar a pessoa em qualquer aparelho, use um store atrelado ao usuário logado, que grava no perfil da conta.

### O que significa o erro 403 no admin-ajax.php ao adicionar ao store

Indica que a requisicao de adicionar o item foi bloqueada, geralmente por um firewall ou WAF filtrando o admin-ajax.php. Libere esse endpoint na configuração do firewall para que o clique no botão chegue a gravar o item no Data Store.

### Existe um limite de itens no JetEngine Data Store

Sim. O store tem o campo Max Number que define a quantidade maxima de itens guardados. Ao atingir o teto, novas adicoes deixam de entrar ou substituem itens antigos, o que pode parecer que o item não foi salvo. Aumente o limite se precisar de mais itens.

**Fonte:** [Crocoblock — Base de Conhecimento do JetEngine (Data Stores)](https://crocoblock.com/knowledge-base/)
