¿Por qué no funciona is_user_logged_in() en WordPress?
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.

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?

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

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/

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

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

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.
