¿Dónde se debe colocar wp_redirect para que funcione?

17 may 2012, 19:23:24
Vistas: 14.1K
Votos: 7

Tengo una página de edición de publicaciones en el front-end ubicada en mysite/post_id/edit y estoy intentando redirigir a los usuarios que no son el autor de vuelta a la publicación. Este es el código con el que estoy trabajando:

    <?php
    global $current_user; get_currentuserinfo();
    if($post->post_author != $current_user->ID):
    wp_redirect( the_permalink() ); exit;
    ?>

El problema que he tenido es que esto parece mostrar el permalink de la publicación en lugar de redirigir.

wp_redirect dice "wp_redirect no se llamará si la página ya ha comenzado, así que asegúrate de llamarlo más arriba." - pero después de colocar el código en la parte superior del archivo header.php todavía tuve el mismo problema de que se mostraba el permalink en lugar de redirigir.

¿Dónde sería el lugar apropiado para agregar este código para que haga la redirección?

¡Gracias de antemano!

EDITADO: Probé algo con el consejo de milo, pero seguiré el post de Tommix antes de actualizar sobre Milo

0
Todas las respuestas a la pregunta 3
2
15

Una vez que estás en la plantilla ya es demasiado tarde, ya que las cabeceras ya han sido enviadas. Debes engancharte antes en la solicitud para comprobar, como con el hook template_redirect:

add_action( 'template_redirect', 'wpse52455_redirect' );

function wpse52455_redirect(){
    // haz tu comprobación y llama a wp_redirect aquí
}

Ten en cuenta que esto se ejecutará en cada solicitud, por lo que también necesitas comprobar que la página actual es tu página de edición.

EDITADO - el código anterior debe ir en el archivo functions.php de tu tema.

17 may 2012 19:57:19
Comentarios

¿tanto el add_action como la función se colocarían en functions.php?

Stephen S. Stephen S.
17 may 2012 20:43:55

@StephenS. sí, ambos en functions.php.

Milo Milo
17 may 2012 20:46:23
0
-2

puede que necesites añadir algo de 'prioridad' a la llamada de la acción. Como:

add_action('template_redirect', 'user_logged_in', 1, 1);
3 ago 2014 16:38:58
6
-3

RESPUESTA completamente funcional:

global $current_user; get_currentuserinfo();
if($post->post_author != $current_user->ID){
wp_redirect(get_post_permalink($post->ID)); 
 exit();
}
17 may 2012 20:51:26
Comentarios

Este código actual está devolviendo No se puede modificar la información de la cabecera - las cabeceras ya fueron enviadas por

Stephen S. Stephen S.
17 may 2012 21:21:54

Extraño, para mí funciona perfectamente. Lo agregué en el archivo single.php. ¿Quizás tu archivo ya hace echo de algo? Coloca el código lo más arriba posible en el archivo php. Por supuesto, también debería obtener el $post porque si no lo obtiene, no sabrá si el usuario es el autor, así que debería ir después de que la variable $post tenga datos. El código es bueno, solo está mal ubicado :) ¿Tal vez pusiste este código en un archivo incluido?

Tommixoft Tommixoft
17 may 2012 21:26:14

Tienes razón - lo tengo funcionando parcialmente - aunque curiosamente está redirigiendo cuando ($post->post_author == $current_user->ID) en lugar de cuando ($post->post_author != $current_user->ID)

Stephen S. Stephen S.
17 may 2012 21:52:21

¿qué sucede si intentas usar esto $post->post_author !== $current_user->ID

Tommixoft Tommixoft
17 may 2012 21:58:43

ah ya veo, no puede obtener el $post->author porque esa variable no ha sido establecida tan temprano en la página

Stephen S. Stephen S.
17 may 2012 23:10:58

si la respuesta te ayudó - por favor selecciónala como buena, para que personas como tú puedan saber qué respuestas fueron útiles para la pregunta.

Tommixoft Tommixoft
18 may 2012 00:07:41
Mostrar los 1 comentarios restantes