wp_redirect() - headers ya enviados

23 feb 2015, 13:37:34
Vistas: 47.1K
Votos: 19

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

No está funcionando y muestra el siguiente error:

Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/theme/wp-content/themes/test/header.php:10) in /Applications/MAMP/htdocs/theme/wp-includes/pluggable.php on line 1178

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

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

if ( isset( $_POST['subscribe'] ) ) {
    // Envía el formulario y debería redirigir
    wp_redirect("/thank-you/");
    exit;
}

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

Me temo que no es la mejor manera de hacerlo. Debería estar creando alguna acción que haga eso, pero no tengo idea de cómo implementarla. La mayoría de los tutoriales que encontré muestran los resultados directamente en la misma página y no requieren una redirección adicional. Tal vez por eso funcionan con funciones dentro del functions.php

0
Todas las respuestas a la pregunta 5
1
22

Encontré la respuesta (vía)

En lugar de usar la función directamente, agregué una acción a "wp_loaded", lo que asegura que se cargue antes de que se envíen las cabeceras.

<?php
add_action ('wp_loaded', 'mi_redireccion_personalizada');
function mi_redireccion_personalizada() {
    if ( isset( $_POST['subscribe'] ) ) {
        $redireccion = 'http://example.com/redirect-example-url.html';
        wp_redirect($redireccion);
        exit;
    }
}     
?>
23 feb 2015 14:08:38
Comentarios

¡Se eliminó el error pero la publicación no se guardó!

Subrata Sarkar Subrata Sarkar
23 feb 2017 16:24:57
0
15

Debes utilizar wp_redirect() antes de get_header() Así no mostrará el error de cabecera.

23 feb 2015 14:07:11
2

también puedes hacer esto

En lugar de la siguiente línea

wp_redirect("$url");

escribe

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

o

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

Definitivamente resolverá tu problema.

20 feb 2020 07:30:29
Comentarios

¡muchas gracias hombre!

Marco Floriano Marco Floriano
24 oct 2023 05:50:55

de nada...@MarcoFloriano

Mohammad Zaer Mohammad Zaer
24 oct 2023 18:58:43
2
add_action('template_redirect', function(){
if(isset($_POST['subscriptio'])){ // Esta condición debe coincidir solo cuando se envía un formulario de registro
/**
 * Realiza tus acciones aquí
 */
wp_redirect(); // Redirección...
}
});
23 feb 2015 13:43:51
Comentarios

Gracias por la ayuda, pero ese código no funcionó para mí. Necesité agregar la acción a "wp_loaded" para que funcionara (Ver mi respuesta)

Snowball Snowball
23 feb 2015 14:09:36

Funciona bien si necesitas establecer is_page_template() cuando haces redirecciones condicionales.

jaredrethman jaredrethman
2 abr 2020 08:09:40
0

Si estás creando un plugin, puedes llamar ob_start(); al principio del código del plugin o ob_start(); en la parte superior del archivo functions.php antes de que comience el código

Inicio del búfer de salida en WordPress

17 mar 2021 01:16:53