# Como corrigir as Options Pages do JetEngine que não salvam configurações no WordPress

As JetEngine Options Pages não salva as configurações quando o slug da página colide com uma opção existente, quando o usuário não tem a capability exigida ou quando o tipo de armazenamento foi trocado depois que os campos já tinham valores, fazendo o painel descartar os dados ao salvar.

## O que é JetEngine Options Page não salva?

As JetEngine Options Pages são telas de configurações globais que você cria dentro do JetEngine para guardar dados que valem para o site inteiro, como telefone, endereco, logo ou textos de rodape, fora do conteúdo de um post específico. Por padrão o JetEngine grava esses valores na tabela wp_options do WordPress, identificados pelo slug que você define ao criar a Options Page. Quando a página funciona, os campos preenchidos no painel ficam disponiveis em todo o site via Dynamic Tags do JetEngine ou da função de leitura da Options Page.

O erro aparece quando você preenche os campos, clica em salvar e os valores voltam vazios, somem após recarregar ou nunca chegam ao frontend. Isso quase sempre tem causa concreta: um slug que conflita com uma opção já existente no wp_options, a capability errada bloqueando a gravacao para o perfil logado, ou uma troca do tipo de armazenamento (de opção única para opções separadas) feita depois que a página já tinha dados, o que dessincroniza onde o JetEngine le e onde grava.

## Como identificar

- Você preenche os campos da Options Page, clica em Update, mas ao recarregar a tela os campos voltam vazios como se nada tivesse sido salvo.
- A mensagem 'Settings saved' (ou 'Configurações salvas') aparece, porém o valor não chega ao frontend pelas Dynamic Tags da Options Page.
- A função de leitura jet_engine()->options_pages->get(...) retorna vazio ou null mesmo com o campo preenchido no painel.
- O valor antigo continua aparecendo no site depois de editado e salvo, indicando que a gravacao não sobrescreveu a opção no wp_options.
- Após trocar o tipo de armazenamento da Options Page, todos os campos que tinham valor passam a aparecer em branco no editor da página.

**Antes de começar:** Antes de trocar o slug ou o tipo de armazenamento de uma Options Page que já esta em producao, faça um backup do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging, porque mudar a chave de gravacao pode deixar os valores antigos orfaos na tabela wp_options.

## Como prevenir

- Defina o slug da Options Page com um prefixo próprio do projeto logo na criação, para nunca colidir com opções do nucleo, do tema ou de outros plugins.
- Escolha o tipo de armazenamento (opção única ou opções separadas) antes de inserir qualquer dado e não altere depois com a página já preenchida.
- Documente a capability exigida por cada Options Page e teste o salvamento com os perfis que realmente vao editar aquelas configurações.
- Inclua a limpeza do object cache no checklist de deploy quando o site usa Redis ou Memcached, para que valores de opção recem-salvos não fiquem mascarados pelo cache.

Erros relacionados

- [Como corrigir os Data Stores do JetEngine que não salvam dados do usuário](https://full.services/wp-fixer/corrigir-data-stores-jetengine-nao-salva/)
- [Como corrigir o erro de permissão ao criar Custom Fields no JetEngine](https://full.services/wp-fixer/corrigir-erro-permissao-custom-fields-jetengine/)
- [Como corrigir o Listing Grid vazio no JetEngine](https://full.services/wp-fixer/corrigir-listing-grid-vazio-jetengine/)

## Causa

- O slug definido na Options Page e igual ao nome de uma opção já existente na tabela wp_options (do nucleo, do tema ou de outro plugin), e a gravacao do JetEngine colide com esse registro e não persiste o valor esperado.
- O perfil do usuário logado não possui a capability exigida pela Options Page (manage_options por padrão), entao o WordPress processa o formulário sem aplicar a atualização da opção.
- O tipo de armazenamento foi alterado depois que a página já tinha dados: alternar entre 'Store as separate options' e opção única serializada muda a chave usada no wp_options, e o JetEngine passa a ler de uma chave diferente da que esta gravada.
- Um plugin de cache de objeto (Redis ou Memcached) serve o valor antigo da opção a partir do cache e não invalida a chave após o save, fazendo o campo parecer que não salvou.
- Em multisite, a Options Page foi registrada no escopo errado: o valor e gravado em um site da rede e lido em outro, ou esperado em wp_options de rede (sitemeta) mas gravado no site individual.

## Como resolver

1. Troque o slug da Options Page por um valor único: Abra a Options Page no JetEngine e confira o campo de slug. Use um prefixo próprio para evitar colisao com opções do nucleo, do tema ou de outros plugins. Slug único impede que a gravacao sobrescreva ou seja sobrescrita por outra opção no wp_options.

```
Painel WP -> JetEngine -> Options Pages -> abra a página
No campo Slug, use um valor exclusivo com prefixo (ex.: minhaempresa_config_geral)
Clique em Update Options Page e teste salvar um campo novamente
```

2. Confira a capability e o perfil do usuário: Verifique a opção de capability da Options Page e confirme que o usuário que esta salvando possui essa permissão. Por padrão o JetEngine exige manage_options, atribuida ao perfil Administrador. Editores e perfis abaixo não gravam sem ajuste.

```
Painel WP -> JetEngine -> Options Pages -> abra a página -> campo Capability
Defina manage_options (ou uma capability que o perfil realmente tenha)
Faca login com um Administrador e tente salvar a Options Page de novo
```

3. Padronize o tipo de armazenamento e não alterne com dados: Decida entre opção única serializada e opções separadas e mantenha a escolha. Trocar depois de já ter valores muda a chave gravada no wp_options e o JetEngine passa a ler de outra chave. Se já trocou, volte ao tipo original ou reinsira os valores no novo tipo.

```
Painel WP -> JetEngine -> Options Pages -> abra a página -> Storage Type
Mantenha um único tipo (ex.: opção única) durante toda a vida da página
Reinsira os valores nos campos após confirmar o tipo final e salve
```

4. Limpe o cache de objeto após salvar: Se o site usa cache de objeto persistente (Redis ou Memcached), o valor antigo da opção pode continuar sendo servido do cache. Limpe o object cache para forçar o WordPress a reler a opção gravada no wp_options.

```
Pelo plugin de cache: acione Flush Object Cache / Purge
Via WP-CLI: wp cache flush
Recarregue a Options Page e confirme que o valor salvo persiste
```

5. Verifique o valor direto no banco com WP-CLI: Para confirmar se a gravacao chegou ao banco, leia a opção pelo slug da Options Page. Se o valor aparece no wp_options mas não no frontend, o problema e de leitura (chave ou escopo); se não aparece, e de gravacao (slug, capability ou cache).

```
wp option get minhaempresa_config_geral --format=json
Em multisite, repita por site: wp option get SLUG --url=https://site-da-rede.com
Compare o slug retornado com o usado nas Dynamic Tags do frontend
```


## Código

```php
<?php
// Le com seguranca um valor de uma Options Page do JetEngine.
// Use no tema/plugin quando precisar do valor fora de uma Dynamic Tag.
function full_get_jet_option( $option_name, $default = '' ) {
    // Guarda: evita fatal error se o JetEngine estiver inativo.
    if ( ! function_exists( 'jet_engine' )
        || ! isset( jet_engine()->options_pages ) ) {
        return $default;
    }
    // Le pelo slug da Options Page + nome do campo.
    $value = jet_engine()->options_pages->get_options( $option_name );
    return ( '' === $value || null === $value ) ? $default : $value;
}

// Exemplo: telefone gravado no campo 'telefone' da Options Page de slug 'minhaempresa_config_geral'.
$telefone = full_get_jet_option( 'minhaempresa_config_geral::telefone', '' );
```

## Perguntas frequentes

### Onde o JetEngine salva os dados de uma Options Page

Por padrão o JetEngine grava os valores na tabela wp_options do WordPress, identificados pelo slug que você define ao criar a Options Page. Você le esses valores no frontend pelas Dynamic Tags da Options Page ou pela função de leitura do JetEngine.

### Por que minha Options Page mostra que salvou mas os campos voltam vazios

Geralmente o slug colide com uma opção já existente no wp_options ou o tipo de armazenamento foi trocado depois de inserir dados, mudando a chave gravada. Use um slug com prefixo próprio e mantenha um único tipo de armazenamento durante toda a vida da página.

### Qual permissão o usuário precisa para salvar uma Options Page do JetEngine

Por padrão a Options Page exige a capability manage_options, que pertence ao perfil Administrador. Perfis abaixo não gravam sem ajuste; confira o campo Capability da página e use uma permissão que o perfil realmente tenha.

### Trocar o tipo de armazenamento apaga os dados da Options Page

Os dados não são apagados do banco, mas alternar entre opção única e opções separadas muda a chave usada no wp_options, entao o JetEngine passa a ler de outra chave e os campos aparecem vazios. Volte ao tipo original ou reinsira os valores no novo tipo.

### Por que o valor antigo continua aparecendo no site depois de salvar

Quando o site usa cache de objeto persistente, como Redis ou Memcached, o valor antigo da opção pode continuar sendo servido do cache. Limpe o object cache (Flush ou wp cache flush) para forçar o WordPress a reler a opção gravada.

### Como verifico se o valor da Options Page realmente chegou ao banco

Use o WP-CLI com wp option get e o slug da Options Page. Se o valor aparece no wp_options mas não no frontend, o problema e de leitura, como chave ou escopo; se não aparece, e de gravacao, como slug, capability ou cache.

### A Options Page do JetEngine funciona em multisite

Funciona, mas o escopo importa: o valor e gravado no wp_options do site onde você salvou e lido por aquele site. Em multisite, garanta que a página esta registrada no site certo e que as Dynamic Tags leem do mesmo escopo, para o valor não parecer perdido.

**Fonte:** [Crocoblock — JetEngine Options Pages (Knowledge Base)](https://crocoblock.com/knowledge-base/jetengine/)
