get_current_user_id() restituisce 0?

4 ott 2014, 12:15:51
Visualizzazioni: 49.8K
Voti: 10

Sto cercando di ottenere l'ID dell'utente attualmente loggato in WordPress. Ho utilizzato il seguente codice:

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

}

Il codice sopra restituisce un risultato vuoto come:

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

Cosa stampa la variabile globale $current_user?

Sisir Sisir
4 ott 2014 12:46:10

Dove si trova il codice che stai utilizzando per chiamare get_current_user_id()? Quando esegui questo codice? È prima o dopo l'azione init?

Otto Otto
5 ott 2014 01:05:18

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

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

La tua domanda è confusa. Stai cercando di ottenere l'ID dell'utente attualmente connesso nel back-end? Qual è la relazione con la seconda parte del tuo codice? Hai bisogno di visualizzare l'ID utente accanto al nome utente nel back-end nella schermata di amministrazione "Utenti"? Per favore chiarisci con una [modifica]

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

In realtà stavo cercando di ottenere l'ID dell'utente attualmente connesso. La seconda parte del codice serve per aggiungere la colonna ID nel back-end. Ora sto ottenendo l'ID utente con il codice sopra menzionato stesso @PieterGoosen. Grazie per aver dedicato il tuo tempo prezioso a me.

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

Ho commesso un errore stupido. Non ero connesso, quindi come avrebbe potuto restituirmi l'ID utente? Dopo aver effettuato l'accesso, sto ottenendo l'ID utente. Grazie a @Justin Bell

PHP Learner PHP Learner
6 ott 2014 09:03:16
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 4
2

Consultando le informazioni su wp_get_current_user() nel Codex, la funzione utilizza l'oggetto globale $current_user e, se necessario, lo inizializza prima dell'uso. Come hanno affermato altri, get_current_user_id() utilizza questa funzione in background.

Considera /wp-includes/user.php, righe 323-327 (la definizione della funzione per questo codice). Alla fine, il valore restituito è return ( isset( $user->ID ) ? (int) $user->ID : 0 ); — questo codice restituirà 0 se l'utente loggato non è disponibile per qualche motivo.

Usa l'azione init o qualsiasi azione successiva per chiamare questa funzione. Chiamarla al di fuori di un'azione può causare problemi. Vedi #14024 per i dettagli.

Questo proviene dalla documentazione di wp_get_current_user. Se stavi usando questo codice all'interno di un template, potevi essere certo che init fosse già stato chiamato. Tuttavia, se provi a recuperare le informazioni dell'utente prima che l'azione init venga chiamata, non otterrai un utente corrente. Questo spiega perché hai ottenuto l'ID dell'utente quando hai aggiunto quelle azioni in functions.php (poiché quelle azioni avvengono dopo init), mentre con il tuo codice originale non è chiaro quando lo invochi.

Fai riferimento alla pagina Plugin API per un'idea generale dell'ordine in cui queste varie azioni vengono invocate.

4 ott 2014 18:12:55
Commenti

Sì, ho controllato nel file wp-includes/user.php, contiene il codice che hai menzionato. Potrebbe essere questo il motivo per cui restituisce l'ID utente 0?

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

Vale anche la pena menzionare che se l'utente non è affatto loggato, la funzione restituisce 0 (o false)

Bysander Bysander
22 apr 2015 19:34:51
1

Utilizza sempre get_current_user_id(); sotto l'azione init.

Di seguito un esempio:

add_action('init', 'myFunction');

function myFunction(){

 $user_ID= get_current_user_id();   

   echo"L'utente numero $user_ID è loggato";
}
24 ott 2014 10:22:44
Commenti

Dove under significa l'azione init, o qualsiasi azione chiamata dopo di essa, giusto?

jgangso jgangso
28 feb 2020 10:55:18
0

Come menzionato dagli altri: se chiami la funzione troppo presto, restituirà il valore 0.

Un buon modo per verificare se è "troppo presto" o meno è questo tipo di controllo:

// NON verificare l'azione 'set_current_user', ma 'init'!!
if ( ! did_action( 'init' ) ) {
    _doing_it_wrong( __FUNCTION__, 'get_current_user_id() chiamato prima dell\'hook init', null );
}
$user_id = get_current_user_id();

Il motivo per cui non usiamo did_action('set_current_user') è:

Se qualche altro codice/plugin ha chiamato get_current_user_id() troppo presto, farà scattare l'esecuzione dell'hook set_current_user. Tuttavia, i dati dell'utente corrente non sono corretti a questo punto, quindi fare affidamento su quell'hook non è una buona idea - solo quando init viene eseguito possiamo essere sicuri di avere l'utente corretto!

22 apr 2015 16:48:41
0

Per versioni di WordPress > 3.4:

Utilizza:

$current_user_id= get_current_user_id();

Per versioni di WordPress < 3.4:

La documentazione dice che se la versione è inferiore a 3.4, utilizzala con init:

add_action('init', 'get_your_current_user_id');
function get_your_current_user_id(){
        $your_current_user_id= get_current_user_id();
        //fai qualcosa qui con esso
}

Puoi consultare la documentazione: wp_get_current_user

7 giu 2016 04:57:02