wp_redirect () - encabezados ya enviados

10

Estoy intentando utilizar wp_redirect()para redirigir al usuario después de enviar correctamente un formulario de registro en la página.

No funciona y muestra el siguiente error:

Advertencia: no se puede modificar la información del encabezado: los encabezados ya enviados por (salida iniciada en /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) en / Applications / MAMP / htdocs / theme / wp- incluye / pluggable.php en línea 1178

Entiendo que ya ha habido salida antes, por eso no funciona, pero no tengo idea de cómo hacer que esto funcione.

El formulario de registro se representa mediante una función, y lo envía otra función, dentro de my functions.php.

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

Luego, ambas funciones se usan donde quiero mostrar el formulario de registro.

Me temo que no es lo mejor que se puede hacer. Debería crear alguna acción que haga eso, pero no tengo idea de cómo implementar eso. La mayoría de los tutoriales que encontré muestran los resultados directamente en la misma página y no requieren una redirección adicional. Quizás es por eso que están trabajando con funciones dentro de functions.php

Bola de nieve
fuente

Respuestas:

15

Encontré la respuesta (vía)

En lugar de usar la función, agregué una acción a "wp_loaded", que se asegura de que se cargue antes de enviar los encabezados.

<?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 nieve
fuente
¡Se deshizo del error pero la publicación no se guardó!
Subrata Sarkar
6

Tiene que usar wp_redirect() antes. get_header() Entonces no mostrará el error de encabezado.

mynamAvinash
fuente
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
fuente
Gracias por la ayuda, pero ese código no funcionó para mí. Necesario para agregar la acción a "wp_loaded" para que funcione (vea mi respuesta)
Snowball
Funciona bien si necesita establecer is_page_template()cuando se redirige condicionalmente.
Sin ley el
1

también puedes hacer esto

En lugar de la línea de abajo

wp_redirect ("$ url");

escribir

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

o

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

Definitivamente resolverá tu problema.

Gráficos Hadid
fuente