# Como corrigir entradas que não salvam no banco de dados no WPForms

Quando entries do WPForms não salvam, o e-mail de notificação chega mas nada aparece em WPForms -> Entries. As causas mais comuns são a versão Lite (gratuita), que só envia por e-mail e não grava no banco, e a opção 'Disable storing entry information in WordPress' marcada no formulário. O conserto é checar a licença e essa opção.

## O que é as entradas (entries) do WPForms que não salvam?

As entradas (entries) do WPForms são os registros de cada envio de formulário, guardados nas tabelas do banco de dados do WordPress e exibidos em WPForms -> Entries no painel. Quando elas não salvam, o visitante envia o formulário, a notificação por e-mail até chega, mas o painel de Entries fica vazio ou não lista aquele envio. Na grande maioria dos casos não é bug do plugin. O motivo costuma ser a versão Lite (gratuita), que por design só entrega o envio por e-mail e não grava no banco, ou a opção 'Disable storing entry information in WordPress' ligada nas configurações do formulário. Outras causas são as tabelas wp_wpforms_entries ausentes ou corrompidas e o usuário do banco sem permissão de escrita. O conserto é confirmar a licença, a opção de armazenamento e a saúde das tabelas.

## Como identificar

- O formulário envia normalmente e a notificação por e-mail chega, mas em WPForms -> Entries não aparece nenhum registro do envio.
- O menu WPForms -> Entries existe mas mostra 'No entries found' ou uma lista vazia mesmo depois de vários testes de envio.
- Em sites com WPForms Lite (gratuito), não há sequer o submenu de Entries, apenas a mensagem para fazer upgrade e ativar o armazenamento.
- Um formulário específico não grava entradas, enquanto outros formulários do mesmo site continuam salvando normalmente.
- As entradas pararam de ser gravadas depois de uma migração de banco, restauração de backup ou troca de servidor.
- No log de erros do WordPress aparece falha de INSERT do MySQL ou referência a uma tabela wp_wpforms_entries inexistente quando o formulário é enviado.

**Antes de começar:** Antes de alterar privilégios de banco ou rodar comandos SQL, faça um backup completo do banco de dados. Conceder permissões erradas ou rodar GRANT com host incorreto pode tirar o site do ar.

## Como prevenir

- Em sites que precisam do histórico de envios no painel, use um plano pago do WPForms ou mantenha o Lite Connect ligado desde o início, em vez de descobrir a perda depois.
- Ao criar cada formulário, confira que a opção 'Disable storing entry information in WordPress' está desmarcada antes de publicar, salvo quando o objetivo é realmente não guardar dados.
- Em migrações e restaurações de backup, exporte e importe o banco inteiro, não só as tabelas do core, para não deixar as tabelas wp_wpforms_entries para trás.
- Depois de qualquer mudança de servidor ou de credenciais de banco, faça um envio de teste e confirme que a entrada aparece em WPForms -> Entries antes de considerar a migração concluída.

Erros relacionados

- [Como corrigir o spam no WPForms mesmo com reCAPTCHA ativo](https://full.services/wp-fixer/corrigir-spam-wpforms/)
- [Como corrigir o erro de reCAPTCHA no WPForms](https://full.services/wp-fixer/corrigir-recaptcha-wpforms/)
- [Como corrigir o erro de redirecionamento após envio no WPForms](https://full.services/wp-fixer/corrigir-redirecionamento-wpforms/)

## Causa

- O site usa WPForms Lite (versão gratuita), que por design entrega cada envio só por e-mail e não grava entradas no banco de dados; o armazenamento de entries exige um plano pago (Basic ou superior) ou o backup via Lite Connect.
- A opção 'Disable storing entry information in WordPress' está marcada no formulário, em Settings -> General -> Advanced, fazendo o WPForms entregar o envio apenas por notificação e descartar a entrada.
- A configuração global 'Disable User Details' ou 'Disable User Cookies' está ligada em WPForms -> Settings -> General -> GDPR, suprimindo dados do visitante e mascarando entradas que parecem vazias no painel.
- Uma das tabelas wp_wpforms_entries, wp_wpforms_entry_meta ou wp_wpforms_entry_fields não foi criada na ativação do plugin (instalação interrompida) ou foi perdida numa migração que exportou só as tabelas do core.
- O usuário MySQL configurado no wp-config.php não tem a permissão de INSERT na tabela de entradas, então o envio falha silenciosamente na hora de gravar e só a notificação por e-mail conclui.
- Um plugin de cache ou de otimização serviu o JavaScript antigo do WPForms e a submissão via AJAX não foi concluída, então o backend nem chega a processar a entrada para gravar.
- O envio caiu como spam: o WPForms marcou a entrada com o filtro anti-spam, reCAPTCHA ou Akismet, e ela está no filtro de spam de Entries em vez da lista principal.

## Como resolver

1. Confirme a versão e a licença do WPForms: o armazenamento de entradas no banco só existe em planos pagos. Veja em WPForms -> Settings se a licença é Lite (gratuita) ou paga. Se for Lite e você precisa do histórico no painel, ative o Lite Connect para guardar os envios ou faça upgrade.

```
WPForms -> Settings -> General -> ver License Key e plano
Lite sem entries: WPForms -> Settings -> Lite Connect -> Enable Entry Backups
```

2. Desligue a opção que impede o armazenamento da entrada: abra o formulário no construtor e confirme que a opção de não armazenar a entrada está desmarcada. Com ela ligada, o WPForms só envia o e-mail e descarta a entrada.

```
WPForms -> Todos os formulários -> editar formulário
Settings -> General -> Advanced -> desmarcar 'Disable storing entry information in WordPress'
```

3. Revise as opções de privacidade globais (GDPR): as opções globais de GDPR podem suprimir dados do visitante e fazer a entrada parecer vazia. Se você precisa dos detalhes do envio no painel, desligue essas opções no nível do site.

```
WPForms -> Settings -> General -> GDPR Enhancements
Avaliar desligar 'Disable User Details' e 'Disable User Cookies'
```

4. Verifique se as tabelas de entradas existem no banco: abra o phpMyAdmin do seu painel de hospedagem e confirme que as tabelas de entradas do WPForms existem. Se faltar alguma, desative e reative o plugin para recriá-las, ou rode o reparo pelo construtor.

```
phpMyAdmin -> selecionar o banco do site -> procurar as tabelas
wp_wpforms_entries
wp_wpforms_entry_meta
wp_wpforms_entry_fields
```

5. Cheque a permissão de escrita do usuário do banco: se as tabelas existem mas nada é gravado, o usuário do MySQL pode estar sem permissão de INSERT. Confirme as credenciais no wp-config.php e, no painel da hospedagem, garanta que o usuário tem todos os privilégios sobre o banco.

```
Conferir DB_USER e DB_NAME no wp-config.php
GRANT ALL PRIVILEGES ON nome_do_banco.* TO 'usuário_do_banco'@'localhost';
FLUSH PRIVILEGES;
```

6. Limpe o cache, cheque o spam e teste um envio: salve o formulário, limpe o cache do site e do CDN e faça um envio de teste numa janela anônima. Depois confira tanto a lista principal quanto o filtro de spam em Entries para ver onde a entrada caiu.

```
Salvar formulário -> limpar cache do site, do plugin de cache e do CDN
Enviar um teste em janela anônima
WPForms -> Entries -> abrir o formulário -> conferir 'Spam'
```


## Código

```php
// functions.php do tema filho — DIAGNOSTICO: registra no log se o WordPress
// consegue de fato gravar na tabela de entradas do WPForms apos cada envio.
// Separa 'configurado para nao salvar' de 'falha de escrita no banco'.
// Veja o resultado em wp-content/debug.log (com WP_DEBUG_LOG ativo).
add_action( 'wpforms_process_complete', function ( $fields, $entry, $form_data, $entry_id ) {
    if ( empty( $entry_id ) ) {
        error_log( 'WPForms: envio do form ' . $form_data['id'] . ' NAO gerou entry_id (armazenamento desligado ou falha de INSERT).' );
        return;
    }
    global $wpdb;
    $tabela = $wpdb->prefix . 'wpforms_entries';
    $existe = $wpdb->get_var( $wpdb->prepare( "SELECT entry_id FROM {$tabela} WHERE entry_id = %d", $entry_id ) );
    error_log( $existe ? 'WPForms: entry ' . $entry_id . ' gravada com sucesso na tabela.' : 'WPForms: entry_id ' . $entry_id . ' retornado mas ausente da tabela ' . $tabela );
}, 10, 4 );
```

## Perguntas frequentes

### Por que o WPForms envia o e-mail mas não salva a entrada no painel?

Porque o envio do e-mail e o armazenamento da entrada são processos separados. Quase sempre o site usa WPForms Lite, que só entrega por e-mail e não grava no banco, ou a opção 'Disable storing entry information in WordPress' está marcada no formulário. Confira a licença em WPForms -> Settings e a opção em Settings -> General -> Advanced do formulário.

### O WPForms Lite gratuito salva as entradas no banco de dados?

Não. Por design, o WPForms Lite entrega cada envio apenas por e-mail e não grava entradas no banco do WordPress. Para ter o histórico no painel você precisa de um plano pago (Basic ou superior) ou pode ligar o Lite Connect, que faz backup dos envios para recuperar depois do upgrade.

### Onde fica a opção que impede o WPForms de salvar a entrada?

No construtor do formulário, em Settings -> General -> Advanced, existe a opção 'Disable storing entry information in WordPress'. Quando ela está marcada, o WPForms só envia a notificação por e-mail e descarta a entrada. Desmarque-a para voltar a gravar os envios no banco.

### Quais tabelas o WPForms usa para guardar as entradas?

As principais são wp_wpforms_entries, wp_wpforms_entry_meta e wp_wpforms_entry_fields, além das tabelas de tarefas e de pagamentos. O prefixo wp_ pode variar conforme o wp-config.php. Se uma dessas tabelas estiver ausente ou corrompida, as entradas não são gravadas mesmo num plano pago.

### Perdi as entradas depois de migrar o site. Como recupero?

Entradas que nunca foram gravadas não têm como ser recuperadas. Se a migração exportou só as tabelas do core e deixou as do WPForms para trás, restaure o banco completo do backup anterior. Por isso o passo padrão é sempre exportar o banco inteiro e testar um envio depois de migrar.

### As entradas podem estar caindo como spam em vez de sumir?

Sim. Se o reCAPTCHA, o anti-spam nativo ou o Akismet marcou o envio, a entrada vai para o filtro de spam dentro de WPForms -> Entries, não para a lista principal. Abra o formulário em Entries e troque o filtro para 'Spam' para conferir se os envios estão lá.

### Por que só um formulário não salva e os outros funcionam?

Quando o problema é só de um formulário, a causa costuma ser local àquele formulário: a opção 'Disable storing entry information in WordPress' marcada nele, ou o anti-spam mandando os envios para o filtro de spam. Compare as configurações desse formulário com as de um que grava normalmente.

### Preciso de código para corrigir entradas que não salvam?

Na maioria dos casos não: o conserto é checar a licença, a opção de armazenamento e o spam. Código só ajuda em diagnóstico avançado, por exemplo um snippet que registra no log se o WordPress consegue gravar na tabela de entradas, para separar problema de configuração de problema de permissão no banco.

**Fonte:** [WPForms — How to Create GDPR Compliant Forms (Disable storing entry information)](https://wpforms.com/docs/how-to-create-gdpr-compliant-forms/)
