Autonomía digital y tecnológica

Código e ideas para una internet distribuida

Cómo evitar el error «Cannot modify header information – headers already sent» cuando se usa wp_redirect en WordPress

Imago voragine.net
[actualizado el ]

Si se quiere redirigir a otra página en WordPress usando wp_redirect() suele ocurrir que no hay efecto alguno, que no se produce la redirección al incluir esta función en el archivo functions.php o en una plantilla de un tema.

WordPress devuelve un error del tipo «Cannot modify header information – headers already sent».

Cuentan en Stackoverflow que este error se puede evitar y conseguir que funcione la redirección incluyendo el siguiente código en el archivo functions.php del tema o en el plugin que se esté desarrollando:

// esta función permite redirecciones, incluso después de que WordPress haya comenzado a componer la salida que enviará al navegador del usuario
add_action('init', 'prefijo_output_buffer');
function prefijo_output_buffer() {
        ob_start();
}

Esta solución tiene como efecto colateral un mayor consumo de memoria y un mayor tiempo de carga de las páginas del sitio web, según comentan en Stackoverflow.

Se pueden minimizar los efectos de ob_start() si lo cargamos únicamente donde se necesite. Para ello podemos usar las funciones condicionales de WordPress y cambiar el hook en el que ejecutar la función:

// esta función permite redirecciones, incluso después de que WordPress haya comenzado a componer la salida que enviará al navegador del usuario
add_action('get_header', 'prefijo_output_buffer');
function prefijo_output_buffer() {
   if ( is_home() )
        ob_start();
}

wp_safe_redirect() en lugar de wp_redirect()

Si las redirecciones son hacia páginas del propio sitio web es recomendable usar wp_safe_redirect(). wp_redirect() únicamente debe ser usado para redirigir fuera del sitio web.

Dejar un comentario

No hay comentarios en esta entrada.
*
*

 

No hay trackbacks