wp_redirect () - encabezados ya enviados

9

Estoy intentando usar 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 han sido enviados por   (la salida comenzó en   /Aplicaciones/MAMP/htdocs/theme/wp-content/themes/test/header.php:10)   en /Applications/MAMP/htdocs/theme/wp-includes/pluggable.php en línea   1178

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

El formulario de registro se procesa mediante una función y es enviado por otra función, dentro de mis funciones.php.

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

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

Me temo que eso no es lo mejor que se puede hacer. Debería estar creando una 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 un redireccionamiento adicional. Quizás es por eso que están trabajando con funciones dentro de functions.php

    
pregunta Snowball 23.02.2015 - 12:37

3 respuestas

15

Encontró la respuesta (via)

En lugar de usar la función, agregué una acción a "wp_loaded", que se asegura de que se cargue antes de que se envíen 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;
    }
}     
?>
    
respondido por el Snowball 23.02.2015 - 13:08
3

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

    
respondido por el mynamAvinash 23.02.2015 - 13:07
2
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();//....
}
});
    
respondido por el Abhisek Malakar 23.02.2015 - 12:43

Lea otras preguntas en las etiquetas