¿Por qué no funciona is_user_logged_in() en WordPress?

18 jul 2012, 10:35:07
Vistas: 11.3K
Votos: 0

Estoy creando un formulario de login para mi sitio, y tengo esta sección:

<?php
if (is_user_logged_in()) {
    echo 'Hola, ', $user_login, '. <a href="', wp_logout_url(), '" title="Cerrar sesión">Cerrar sesión</a>';
} else {
    wp_login_form();
}

Y después de iniciar sesión, regresa a la página sin indicación de haberlo hecho.
Sospecho que is_user_logged_in() no está funcionando, pero no sé cómo depurar este problema.

EDITO: Cuando hago esto:

global $current_user;
var_dump($current_user);

Siempre obtengo:

object(WP_User)#3 (7) { ["data"]=> NULL ["ID"]=> int(0) ["caps"]=> array(0) { } ["cap_key"]=> NULL ["roles"]=> array(0) { } ["allcaps"]=> array(0) { } ["filter"]=> NULL }

No importa si he 'iniciado sesión' con el formulario anterior.

2
Comentarios

¿Desactivaste todos los plugins de caché y el caché de tu navegador? ¿Sigue ocurriendo?

fuxia fuxia
18 jul 2012 10:49:52

Sí, intenté borrar el caché.

Debo mencionar que estoy intentando implementar WordPress en un sitio web existente.

Así que realmente no quiero usar ningún plugin ni nada similar.

Adola Adola
18 jul 2012 10:52:30
Todas las respuestas a la pregunta 2
4

No hay nada malo con la función, ¡es el hecho de que en realidad no estás iniciando sesión!

¿Dices que estás haciendo tu propio formulario de inicio de sesión? ¿Este envía los datos al wp-login.php estándar, o manejas la solicitud tú mismo?

¿La ruta/dominio del formulario difiere del de WordPress? Si inspeccionas tus cookies, ¿se está estableciendo alguna?

18 jul 2012 11:04:10
Comentarios

Estoy usando wp_login_form()

Y en cuanto a la ruta/dominio, no estoy muy seguro.

Estoy usando Chrome, y según la herramienta de depuración de perfil, sugiere:

Dominio:localhost Ruta:/ Fecha:Fri, 10 Aug 2012 11:14:30 GMT Tamaño:70

Adola Adola
18 jul 2012 11:08:07

Y para el formulario, está almacenado en:

http://localhost/newgameplus/TEST/scripts/php/testWP.php

Y la instalación de WordPress está en:

http://localhost/newgameplus/wordpress/

Adola Adola
18 jul 2012 11:09:10

Creo que ese es el problema - WordPress establecerá una cookie con la ruta /newgameplus/wordpress/, que no se leerá bajo /newgameplus/TEST/scripts/php/testWP.php. Prueba define( 'COOKIEPATH', '/' ); en tu wp-config.php

TheDeadMedic TheDeadMedic
18 jul 2012 11:53:35

Por cierto, recomiendo encarecidamente usar hosts virtuales para desarrollar: http://wordpress.stackexchange.com/questions/32331/wordpress-local-development-environment

TheDeadMedic TheDeadMedic
18 jul 2012 11:55:43
0

Sé que es bastante tarde, pero estoy añadiendo mi respuesta para ayudar a otros. Si utilizas la función wp_signon() para iniciar sesión y luego verificas con is_user_logged_in(), necesitas establecer primero el usuario actual con wp_set_current_user() porque wp_signon() no maneja la configuración del usuario actual como se describe en el codex de WP:

https://developer.wordpress.org/reference/functions/wp_signon/

Esta es una de las razones por las que la función is_user_logged_in() devuelve falso cuando pensabas que ya habías iniciado sesión con un usuario.

7 feb 2023 03:22:22