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.