¿get_current_user_id() devuelve 0?

4 oct 2014, 12:15:51
Vistas: 49.8K
Votos: 10

Estoy tratando de obtener el ID del usuario actualmente conectado en WordPress. He usado el siguiente código:

function users_list()
{
   global $current_user;
   $current_user =  wp_get_current_user();
   echo 'ID de Usuario: ' . $current_user->ID ;
   print_r($current_user);

}

El código anterior devuelve un resultado vacío como este:

WP_User Object ( [data] => [ID] => 0 [caps] => Array ( ) [cap_key] => [roles] => Array ( ) [allcaps] => Array ( ) [filter] => )
6
Comentarios

¿Qué imprime global $current_user?

Sisir Sisir
4 oct 2014 12:46:10

¿Dónde está el código que estás usando para llamar a get_current_user_id()? ¿Cuándo estás ejecutando este código? ¿Es antes o después de la acción init?

Otto Otto
5 oct 2014 01:05:18

Muestra WP_User Object ( [data] => [ID] => 0 [caps] => Array ( ) [cap_key] => [roles] => Array ( ) [allcaps] => Array ( ) [filter] => ) @Sisir

PHP Learner PHP Learner
6 oct 2014 08:02:23

Tu pregunta es confusa. ¿Estás intentando obtener el ID del usuario actualmente conectado en el backend? ¿Cuál es la relación con la segunda parte de tu código? ¿Necesitas mostrar el ID del usuario junto al nombre de usuario en el backend, en la pantalla de administración de "Usuarios"? Por favor acláralo en una [edición]

Pieter Goosen Pieter Goosen
6 oct 2014 08:44:55

En realidad intenté obtener el ID del usuario actualmente conectado. La segunda parte del código es para agregar la columna de ID en el backend. Ahora estoy obteniendo el ID del usuario con el código anterior mismo @PieterGoosen. Gracias por dedicarme tu valioso tiempo

PHP Learner PHP Learner
6 oct 2014 09:00:55

He cometido un error tonto. No me había conectado, entonces ¿cómo podría devolver el ID del usuario? Después de iniciar sesión, estoy obteniendo el ID del usuario. Gracias a @Justin Bell

PHP Learner PHP Learner
6 oct 2014 09:03:16
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 4
2

Según la información de wp_get_current_user() en el Codex, la función utiliza el objeto global $current_user y, si es necesario, lo inicializa antes de usarlo. Como otros han mencionado, get_current_user_id() utiliza esta función en segundo plano.

Considera /wp-includes/user.php, líneas 323-327 (la definición de la función para este código). Al final, el valor de retorno es return ( isset( $user->ID ) ? (int) $user->ID : 0 ); — este código devolverá 0 si el usuario conectado no está disponible por alguna razón.

Usa el hook init o cualquier acción posterior para llamar a esta función. Llamarla fuera de una acción puede causar problemas. Consulta #14024 para más detalles.

Esto proviene de la documentación de wp_get_current_user. Si estás utilizando este código dentro de una plantilla, puedes estar seguro de que init ya ha sido ejecutado. Sin embargo, si intentas obtener información del usuario antes de que se llame a la acción init, no obtendrás el usuario actual. Esto explica por qué obtuviste el ID del usuario al añadir esas acciones en functions.php (ya que esas acciones ocurren después de init), mientras que con tu código original no está claro cuándo lo invocas.

Por favor, consulta la página de la API de Plugins para tener una idea general del orden en que se invocan estas diversas acciones.

4 oct 2014 18:12:55
Comentarios

Sí, he verificado en el archivo wp-includes/user.php, tiene el código que mencionaste. ¿Podría ser esta la razón por la que devuelve el ID de usuario 0?

PHP Learner PHP Learner
6 oct 2014 08:12:39

También vale la pena mencionar que si el usuario no ha iniciado sesión en absoluto, la función también devuelve 0 (o false)

Bysander Bysander
22 abr 2015 19:34:51
1

Siempre usa get_current_user_id(); bajo la acción init.

A continuación, un ejemplo:

add_action('init', 'miFuncion');

function miFuncion(){

 $user_ID= get_current_user_id();   

   echo"El usuario número $user_ID está conectado";
}
24 oct 2014 10:22:44
Comentarios

¿Donde under significa la acción init, o cualquier acción que se llame después de ella, correcto?

jgangso jgangso
28 feb 2020 10:55:18
0

Como mencionaron otros: Si llamas a la función demasiado temprano, devolverá el valor 0

Una buena forma de verificar si es "demasiado temprano" o no es este tipo de comprobación:

// NO verifiques la acción 'set_current_user', sino 'init'!!
if ( ! did_action( 'init' ) ) {
    _doing_it_wrong( __FUNCTION__, 'get_current_user_id() llamado antes del hook init', null );
}
$user_id = get_current_user_id();

La razón por la que no usamos did_action('set_current_user') es:

Si algún otro código/plugin llamó a get_current_user_id() demasiado temprano, activará que se ejecute el hook set_current_user. Sin embargo, los datos del usuario actual no son correctos en este punto, por lo que confiar en ese hook de acción no es una buena idea. ¡Solo cuando se ejecuta init podemos estar seguros de tener el usuario correcto!

22 abr 2015 16:48:41
0

Para versiones de WordPress > 3.4:

Usa:

$current_user_id= get_current_user_id();

Para versiones de WordPress < 3.4:

La documentación dice que si la versión es menor a 3.4 se debe usar con init:

add_action('init', 'get_your_current_user_id');
function get_your_current_user_id(){
        $your_current_user_id= get_current_user_id();
        //haz algo aquí con ello
}

Puedes consultar la documentación: wp_get_current_user

7 jun 2016 04:57:02