Comprobando si un usuario ha iniciado sesión y redirigirlo a una página diferente

24 jul 2011, 19:12:56
Vistas: 20K
Votos: 0

Estoy creando un sitio solo para miembros que requiere que los usuarios inicien sesión para usar el sitio.

La página de inicio es visible públicamente. En la página de inicio, me gustaría incluir una función para redirigir a los usuarios a una página dentro del sitio si han iniciado sesión.

El código que intenté

<?php if (is_user_logged_in() ) {
 wp_redirect ('dashboard' );
 exit;
 }
?>

Me da un error de "headers already sent" (cabeceras ya enviadas). El código está colocado en la parte superior de mi archivo php.

¿Qué estoy haciendo mal?

3
Comentarios

¿Dice de dónde se envían los encabezados?

Bainternet Bainternet
24 jul 2011 19:27:00

/wp-includes/pluggable.php en la línea 934

javy javy
24 jul 2011 19:38:59

prueba activando wp_debug para ver qué está pasando allí

Bainternet Bainternet
24 jul 2011 20:57:04
Todas las respuestas a la pregunta 2
4

No estoy seguro si lo simplificaste por ejemplo, pero asegúrate de usar la URL completa en la llamada a wp_redirect().

Además, en lugar de tenerlo en la plantilla, creo que sería más apropiado ejecutarlo en el hook template_redirect.

24 jul 2011 20:02:16
Comentarios

Mi solución es wp_redirect ( home_url("/dashboard") );, y he puesto este código en la línea 1 de la plantilla. Aunque no estoy familiarizado con los hooks, así que probablemente tengas un punto válido. ¿Por qué?

javy javy
24 jul 2011 21:36:07

@javy template_redirect es semánticamente el lugar adecuado en el código como "WP sabe lo que necesita para comenzar a cargar y mostrar, pero puedes cambiar su decisión". El inicio de la plantilla es "ya estamos cargando esto". Si no quieres lo que hay en la plantilla, no hay razón para llegar tan lejos en el proceso.

Rarst Rarst
24 jul 2011 21:53:19

Tiene sentido, ¿suena como que ahorra algo de utilización del servidor?

javy javy
25 jul 2011 03:14:52

@javy No creo que la diferencia en rendimiento sea significativa entre ambos.

Rarst Rarst
25 jul 2011 10:28:10
0
<?php if (is_user_logged_in() ) {
wp_redirect ( home_url("/dashboard") );
exit;
}
?>

Es lo que he conseguido hacer, y funciona. Además, creo que también me equivoqué al poner esto debajo

<?php
/*Plantilla Nombre: Inicio*/
?>

El nuevo código está en la línea 1 y funciona.

25 jul 2011 03:13:41