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.