# Como corrigir o redirecionamento que não funciona no WPForms

O redirecionamento do WPForms não funciona quando a confirmacao do formulário esta no tipo Mensagem em vez de Go to URL ou Show Page, quando a URL de destino esta invalida, ou quando cache e conflitos de JavaScript impedem o envio AJAX de concluir o redirect após o envio.

## O que é redirecionamento do WPForms?

O redirecionamento do WPForms e definido pela confirmacao do formulário, configurada em Settings e depois Confirmations dentro do construtor. O WPForms oferece três tipos de confirmacao após o envio: Message, que mostra uma mensagem de sucesso no lugar do formulário; Show Page, que leva o visitante a uma página publicada do próprio site ou de volta a página anterior; e Go to URL (Redirect), que envia o visitante para qualquer URL, inclusive externa. Quando o formulário fica na mensagem padrão e nunca leva o usuário para a página de obrigado, o redirecionamento não funcionou.

O WPForms envia o formulário via AJAX por padrão, sem recarregar a página, e e o JavaScript do plugin que dispara o redirect ao receber a resposta de sucesso. Por isso o problema costuma estar em um destes pontos: a confirmacao não esta no tipo de redirecionamento, a URL de destino esta vazia ou mal formada, uma confirmacao condicional anterior venceu a disputa, ou cache e conflitos de script interromperam o envio antes do redirect acontecer.

## Como identificar

- Após o envio o formulário exibe a mensagem padrão 'Thanks for contacting us! We will be in touch with you shortly.' e nunca redireciona para a página esperada.
- O formulário envia com sucesso e mostra a mensagem de confirmacao, mas o visitante continua na mesma página em vez de ir para a página de obrigado.
- A confirmacao Go to URL foi configurada, porém o redirect aponta para um endereco errado ou retorna 404 após o envio.
- Com várias confirmacoes condicionais, sempre dispara a confirmacao errada e o redirecionamento previsto nunca acontece.
- No console do navegador aparecem erros de JavaScript ao enviar o formulário, e a aba Network mostra a requisicao admin-ajax travada ou sem resposta de sucesso.

**Antes de começar:** Antes de desativar plugins, trocar de tema ou alterar regras de cache em producao, faca um backup do site (arquivos e banco de dados) ou teste primeiro em um ambiente de staging, para reverter caso o envio do formulário pare de funcionar.

## Como prevenir

- Sempre que o objetivo for levar o visitante a uma página de obrigado, configure a confirmacao em Go to URL ou Show Page logo na criação do formulário, e não deixe no tipo Message padrão.
- Mantenha a página que contem formulários fora do cache estático, adicionando a URL a lista de páginas nunca cacheadas do plugin de cache e do CDN.
- Ao usar confirmacoes condicionais, documente a ordem das regras e envie um teste para cada cenario antes de publicar, já que a primeira regra que casa vence.
- Atualize WPForms, plugins e tema em staging e valide o envio de um formulário de teste após cada atualização, evitando que um conflito de script quebre o redirect em producao.

Erros relacionados

- [Como corrigir a lógica condicional que não funciona no WPForms](https://full.services/wp-fixer/corrigir-logica-condicional-wpforms/)
- [Como corrigir o formulário multi-página que não avanca no WPForms](https://full.services/wp-fixer/corrigir-multi-page-form-wpforms/)
- [Como corrigir entradas que não salvam no banco de dados no WPForms](https://full.services/wp-fixer/corrigir-entries-nao-salvam-wpforms/)

## Causa

- A confirmacao do formulário esta no tipo Message (padrão) em vez de Go to URL (Redirect) ou Show Page, entao o WPForms apenas exibe a mensagem de sucesso e nunca executa um redirecionamento.
- O campo de URL da confirmacao Go to URL esta vazio ou com a URL mal formada (sem https, com espaco ou domínio digitado errado), fazendo o redirect falhar ou cair em 404.
- Existem várias confirmacoes condicionais e uma regra anterior, avaliada de cima para baixo, foi atendida primeiro e disparou outra confirmacao, parando a verificacao antes de chegar na que tinha o redirecionamento.
- Um plugin de cache de página serve uma versão estática antiga do formulário, com nonce expirado, e o envio AJAX falha sem retornar a resposta de sucesso que dispara o redirect do WPForms.
- Um conflito de JavaScript com outro plugin ou tema quebra o script do WPForms no carregamento, entao o envio AJAX não completa e o redirect, que depende desse script, nunca e executado.

## Como resolver

1. Confira o tipo da confirmacao do formulário: Abra o formulário no construtor e va em Settings e depois Confirmations. Confirme que o tipo escolhido e Go to URL (Redirect), para enviar a uma URL qualquer, ou Show Page, para levar a uma página publicada do site. Se estiver em Message, o WPForms so mostra a mensagem e nunca redireciona.

```
Painel WP -> WPForms -> Todos os Formulários -> abra o formulário
No construtor: Settings -> Confirmations
Em Confirmation Type, selecione 'Go to URL (Redirect)' ou 'Show Page'
```

2. Valide a URL de destino do redirecionamento: No tipo Go to URL, preencha a URL completa com https e sem espacos. No tipo Show Page, escolha a página certa no dropdown de páginas publicadas. Abra a URL de destino em outra aba para garantir que ela existe e não retorna 404 antes de salvar.

```
Em Confirmation Redirect URL, cole a URL completa (ex.: https://seusite.com/obrigado/)
No tipo Show Page, selecione a página no dropdown 'Confirmation Page'
Abra a URL em outra aba do navegador e confirme que carrega sem 404
Clique em Save para salvar o formulário
```

3. Revise a ordem das confirmacoes condicionais: Se o formulário tem mais de uma confirmacao, o WPForms avalia as regras de cima para baixo e dispara a primeira que casar, parando ali. Reordene para que a confirmacao com o redirecionamento certo esteja na posicao correta e teste cada regra com um envio real.

```
No construtor: Settings -> Confirmations
Arraste as confirmacoes para ajustar a ordem de avaliacao (topo vence primeiro)
Revise as regras de lógica condicional de cada confirmacao
Envie um teste para cada cenario e confirme qual confirmacao dispara
```

4. Limpe o cache e exclua a página do formulário do cache: Limpe o cache do plugin de cache e do CDN, depois adicione a página que contem o formulário as páginas nunca cacheadas. Cache de página serve uma versão antiga com nonce expirado e quebra o envio AJAX, impedindo o redirect de disparar.

```
Limpe todo o cache no painel do seu plugin de cache e do CDN
Adicione a URL da página do formulário a lista 'Never Cache URLs' do plugin de cache
Recarregue a página do formulário com o cache do navegador limpo e teste o envio
```

5. Isole conflito de JavaScript no envio: Se o redirect ainda falha, abra o console do navegador, envie o formulário e veja se ha erro de JavaScript. Desative os outros plugins um a um e troque para um tema padrão, testando o envio a cada passo para achar o que quebra o script do WPForms.

```
Abra o console do navegador (F12 -> Console) e envie o formulário
Painel WP -> Plugins -> desative os demais plugins um a um
Painel WP -> Aparencia -> Temas -> ative um tema padrão (ex.: Twenty Twenty-Four)
Teste o envio a cada passo até o redirecionamento voltar a funcionar
```


## Código

```php
<?php
// Forca o redirecionamento de um formulario WPForms apos o envio,
// como rede de seguranca quando a confirmacao Go to URL nao dispara.
add_action( 'wpforms_process_complete', 'full_wpforms_force_redirect', 10, 4 );
function full_wpforms_force_redirect( $fields, $entry, $form_data, $entry_id ) {
    // Troque 123 pelo ID real do seu formulario (WPForms -> Todos os Formularios).
    if ( (int) $form_data['id'] !== 123 ) {
        return;
    }
    $destino = home_url( '/obrigado/' );
    // Redirect compativel com o envio AJAX do WPForms.
    wpforms()->get( 'process' )->redirect_url = esc_url_raw( $destino );
}
```

## Perguntas frequentes

### Por que o WPForms mostra a mensagem de sucesso mas não redireciona

Porque a confirmacao do formulário esta no tipo Message, que apenas exibe uma mensagem no lugar do formulário. Para redirecionar, troque o tipo para Go to URL (Redirect) ou Show Page em Settings e depois Confirmations dentro do construtor.

### Como faco o WPForms redirecionar para outra página após o envio

No construtor, abra Settings e depois Confirmations e escolha Show Page para levar a uma página do site ou Go to URL (Redirect) para enviar a uma URL qualquer. Preencha a página ou a URL de destino e salve o formulário.

### O redirecionamento do WPForms aceita URL externa

Sim. O tipo Go to URL (Redirect) aceita qualquer URL, inclusive de outro site, segundo a documentação do WPForms. Informe a URL completa com https e sem espacos para o redirect funcionar.

### Por que minha confirmacao condicional dispara a errada e não redireciona

O WPForms avalia as confirmacoes de cima para baixo e dispara a primeira cuja regra for atendida, parando ali. Reordene as confirmacoes para que a regra com o redirecionamento certo seja avaliada na posicao correta e teste cada cenario.

### O cache pode impedir o redirecionamento do WPForms

Sim. Um plugin de cache pode servir uma versão antiga da página com nonce expirado, fazendo o envio AJAX falhar sem retornar o sucesso que dispara o redirect. Limpe o cache e exclua a página do formulário do cache para corrigir.

### O WPForms recarrega a página ao redirecionar

O WPForms envia o formulário via AJAX, sem recarregar, e o JavaScript do plugin executa o redirect ao receber a resposta de sucesso. Se esse script quebra por conflito, o envio não completa e o redirecionamento não acontece.

### Como redirecionar so quando uma condicao for atendida no WPForms

Crie mais de uma confirmacao em Settings e depois Confirmations, ative a lógica condicional na confirmacao do redirect e defina a regra. Lembre que a primeira confirmacao com regra atendida vence, entao a ordem importa.

### Como testar se o redirecionamento do formulário esta funcionando

Abra a página publicada do formulário em uma aba anonima, envie um teste e confira se você e levado a página de destino. Repita para cada confirmacao condicional e verifique o console do navegador caso o redirect não dispare.

**Fonte:** [WPForms — Setting Up Form Confirmations](https://wpforms.com/docs/setup-form-confirmation/)
