La función wp_redirect() no está funcionando
wp_redirect($post->guid)
no está funcionando. ¿Cómo puedo arreglarlo?
Este es mi código:
if(isset($_REQUEST['vid']) ){
$id=$_REQUEST['vid'];
$post_title = 'sasa';
$post_content ='zxczxczxc';
$new_post = array(
'ID' => '',
'post_author' => $user->ID,
'post_content' => $post_content,
'post_title' => $post_title,
'post_status' => 'publish',
// AHORA YA ES UN ARRAY
);
$post_id = wp_insert_post($new_post);
// Esto te redirigirá a la entrada recién creada
$post = get_post($post_id);
$url=$post->guid;
wp_redirect($post->guid);
}

Dos cosas están mal aquí:
- No uses
$post->guid
como una URL - Debes obligatoriamente usar
exit()
después dewp_redirect()
(ver el Codex)
wp_redirect()
no termina la ejecución automáticamente y casi siempre debe ir seguido de exit. Para redirigir a la página de tu nueva entrada:
//..... código como en la pregunta
$post_id = wp_insert_post($new_post);
$url = get_permalink( $post_id );
wp_redirect($url);
exit();

esto no está funcionando, si ejecuto la página la consola muestra 302 Found 479ms jquery...r=1.7.1 (línea 4) GET http://localhost/wordpress/newpages-17/
200 OK 1.2s cargando..........

Eso es un error de JS. No tiene nada que ver con wp_redirect
. La respuesta anterior es la forma correcta de hacerlo, así que debes estar haciendo algo más mal.

sorry.it solo muestra GET localhost/wordpress/newpages-17 200 OK 1.2s de carga..........

@StephenHarris ¿te importaría revisar mi pregunta sobre redirecciones en http://wordpress.stackexchange.com/q/76991/10413? También probé tu código de esta respuesta usando $pid pero aún no logro que funcione. Gracias

Tengo una solución sencilla, por favor lee:
Si estás usando
wp_redirect($url)
en archivos del tema y no funciona, añadeob_clean() ob_start()
en tu archivo de funciones al inicio.Si lo usas en un plugin, añade
ob_clean() ob_start()
en el archivo principal del plugin al inicio.
Y asegúrate de haber añadido la función exit() después de wp_redirect($url)
Así:
$url = 'http://example.com';
wp_redirect($url);
exit();

Esto resuelve el problema con Mozilla Firefox que devolvía 200 en lugar de 302 para que ocurriera la redirección. Chrome redirige mientras que Firefox no. Esta solución ayuda. ¡Gracias!

Esta es una respuesta más detallada si estás creando un plugin o diseñando una plantilla. Funcionó para mí.

He estado teniendo problemas para hacer que esto funcione en mi tema personalizado... Funciona perfectamente...

Nota, como se mencionó en otra respuesta, que en las plantillas necesitas hacer la verificación de inicio de sesión y la redirección antes de la función 'get_header()', o colocar tu función de verificación de inicio de sesión en el add_filter('init','miverificacionlogin') en tu plantilla. De lo contrario, aparecerá un error de 'headers already sent' que podría no mostrarse en tu registro de errores (dependiendo de la configuración de errores).

¡Funcionó! Por cortesía hacia otros desarrolladores, asegúrate de llamar a ob_clean
una segunda vez. ob_clean();ob_start(); /*código del plugin*/ ob_clean();

No estoy seguro si esto ayudará... pero descubrí que tenía algo de código en una plantilla y estaba comenzando con get_header() de esta manera:
<?php
/**
* .. Comentarios de la plantilla
*/
get_header();
if(...) {
...
if(...) {
...
wp_redirect($url);
exit();
}
}
?>
y estaba obteniendo el mismo problema de encabezados enviados previamente... Lo que hice fue simplemente mover get_header() al final del bloque y ¡voilá!
<?php
/**
* .. Comentarios de la plantilla
*/
if(...) {
...
if(...) {
...
wp_redirect($url);
exit();
}
}
get_header();
?>
No se deshabilitó ningún plugin y todo estuvo bien... puedes intentarlo a ver si te funciona.

Esta es una buena forma de hacerlo, si tienes acceso al código fuente del tema. Los redireccionamientos deben ejecutarse antes de la llamada a get_header
.

Nunca uses el valor GUID de la entrada, no tiene que coincidir con la URL real de la entrada.
http://codex.wordpress.org/Changing_The_Site_URL#Important_GUID_Note
wp_redirect( get_permalink( $post_id ) );
exit(); // siempre haz exit
Además, asegúrate de que wp_redirect
no esté siendo interceptado por algo más que impida que funcione correctamente. Desactiva todos los plugins y vuelve a Twenty Ten/Eleven para comprobarlo.

Tuve los mismos problemas aquí, Probé varios métodos como
add_action( 'init', 'mi_nombre_de_funcion'); o add_action( 'wp_head', 'mi_nombre_de_funcion'); pero no funcionaban
Finalmente encontré el hook que funciona perfectamente para redireccionar, aquí está mi código completo en functions.php
function redireccionar_pagina_inicio(){
ob_clean();
ob_start();
$args = array(
'public' => true,
'_builtin' => false,
);
$output = 'names'; // names or objects, note names is the default
$operator = 'and'; // 'and' or 'or'
$post_types = get_post_types( $args, $output, $operator );
if(is_singular($post_types)){
$url = get_bloginfo('url');
wp_redirect($url, '301');
exit();
}
}
add_action( 'template_redirect', 'redireccionar_pagina_inicio');
Solo usa el hook add_action( 'template_redirect', 'mi_nombre_de_funcion');
Nota: Estoy usando un child-theme

Asegúrate de no tener: get_header();
o cualquier función de WordPress que potencialmente pueda crear contenido como el encabezado (header) y pie de página (footer) en tu plantilla. De lo contrario, la redirección no funcionará.
Algunos desarrolladores intentan limpiar la página usando ob_start();
pero si tienes contenido en tu página, incluso si usas ob_start();
, la redirección no funcionará.
Y luego simplemente prueba este código:
wp_redirect(get_permalink($post->ID));
exit;
