wp_redirect () - cabeçalhos já enviados

10

Estou tentando usar wp_redirect()para redirecionar o usuário depois de enviar com êxito um formulário de inscrição na página.

Não está funcionando e mostra o seguinte erro:

Aviso: Não é possível modificar as informações do cabeçalho - os cabeçalhos já enviados por (saída iniciada em /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) em / Aplicativos / MAMP / htdocs / theme / wp- inclui / pluggable.php na linha 1178

Entendo que já houve saída antes, é por isso que não está funcionando, mas não tenho idéia de como fazer isso funcionar.

O formulário de inscrição é renderizado por uma função e é enviado por outra função, dentro do meu functions.php.

if ( isset( $_POST['subscribe'] ) ) {
    // Submits the form and should then redirect
    wp_redirect("/thank-you/");
    exit;
}

Em seguida, essas duas funções são usadas onde quero mostrar o formulário de inscrição.

Receio que não seja a melhor coisa a fazer. Eu deveria estar criando alguma ação que faça isso, mas não tenho idéia de como implementá-lo. A maioria dos tutoriais que encontrei mostra os resultados diretamente na mesma página e não requer um redirecionamento adicional. Talvez seja por isso que eles estejam trabalhando com funções dentro das functions.php

Bola de neve
fonte

Respostas:

15

Encontrou a resposta (via)

Em vez de usar a função, adicionei uma ação ao "wp_loaded", que garante que ela seja carregada antes do envio de qualquer cabeçalho.

<?php
add_action ('wp_loaded', 'my_custom_redirect');
function my_custom_redirect() {
    if ( isset( $_POST['subscribe'] ) ) {
        $redirect = 'http://example.com/redirect-example-url.html';
        wp_redirect($redirect);
        exit;
    }
}     
?>
Bola de neve
fonte
Ele se livrou do erro, mas a postagem não foi salva!
Subrata Sarkar
6

Você precisa usar wp_redirect() antes. get_header() Então não será exibido o erro do cabeçalho.

mynamAvinash
fonte
3
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){// make this condition such that it only matches when a registraiotn form get submitted
/**
 * do your stuff here
 */
wp_redirect();//....
}
});
Abhisek Malakar
fonte
Obrigado pela ajuda, mas esse código não funcionou para mim. Necessário para adicionar a ação para "wp_loaded" para obtê-lo trabalhadas (Veja a minha resposta)
Snowball
Funciona bem se você precisar estabelecer is_page_template()ao redirecionar condicionalmente.
Lawless
1

você também pode fazer isso

Em vez da linha abaixo

wp_redirect ("$ url");

Escreva

echo("<script>location.href = '".$url."'</script>");

ou

<?php <script><?php echo("location.href = '".$url."';");?></script>?>

Definitivamente resolverá seu problema.

Hadid Graphics
fonte