get_current_user_id() returnează 0?

4 oct. 2014, 12:15:51
Vizualizări: 49.8K
Voturi: 10

Încerc să obțin ID-ul utilizatorului curent logat în WordPress. Am folosit următorul cod:

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

}

Codul de mai sus returnează un rezultat gol, astfel:

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

Ce afișează global $current_user?

Sisir Sisir
4 oct. 2014 12:46:10

Unde este codul pe care îl folosești pentru a apela get_current_user_id()? Când rulezi acest cod? Este înainte sau după acțiunea init?

Otto Otto
5 oct. 2014 01:05:18

Afișează 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

Întrebarea ta este confuză. Încerci să obții ID-ul utilizatorului curent autentificat în back-end? Care este relația cu a doua parte a codului tău? Ai nevoie să afișezi ID-ul utilizatorului lângă numele de utilizator în back-end pe ecranul de administrare "Utilizatori"? Te rog să clarifici printr-o [editare]

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

De fapt, am încercat să obțin ID-ul utilizatorului curent autentificat. A doua parte a codului este pentru adăugarea coloanei ID în back-end. Acum obțin ID-ul utilizatorului prin codul de mai sus însuși @PieterGoosen. Mulțumesc că ți-ai petrecut timpul prețios cu mine

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

Am făcut o greșeală stupidă. Adică nu m-am autentificat, așa că cum ar fi putut să returneze ID-ul utilizatorului. După ce m-am autentificat, am obținut ID-ul utilizatorului. Mulțumesc @Justin Bell

PHP Learner PHP Learner
6 oct. 2014 09:03:16
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 4
2

Conform informațiilor din Codex despre wp_get_current_user(), această funcție utilizează obiectul global $current_user și, dacă este necesar, îl inițializează înainte de utilizare. După cum au menționat și alții, get_current_user_id() folosește această funcție în spate.

Luați în considerare /wp-includes/user.php, liniile 323-327 (definiția funcției pentru acest cod). La final, valoarea returnată este return ( isset( $user->ID ) ? (int) $user->ID : 0 ); — acest cod va returna 0 dacă utilizatorul autentificat nu este disponibil din anumite motive.

Folosește acțiunea init sau orice altă acțiune ulterioară pentru a apela această funcție. Apelarea ei în afara unei acțiuni poate cauza probleme. Consultă #14024 pentru detalii.

Această informație provine din documentația pentru wp_get_current_user. Dacă folosești acest cod într-un template, poți fi sigur că acțiunea init a fost deja apelată. Totuși, dacă încerci să accesezi informațiile despre utilizator înainte ca acțiunea init să fie apelată, nu vei obține un utilizator curent. Asta explică de ai obținut ID-ul utilizatorului atunci când ai adăugat acele acțiuni în functions.php (deoarece acele acțiuni au loc după init), în timp ce cu codul tău original nu este clar când anume se apelează.

Te rugăm să consulți pagina Plugin API pentru a înțelege ordinea în care sunt apelate aceste diverse acțiuni.

4 oct. 2014 18:12:55
Comentarii

Da, am verificat în fișierul wp-includes/user.php, acesta conține codul menționat de dumneavoastră. Poate fi acesta motivul pentru care se returnează ID-ul de utilizator 0?

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

De asemenea, merită menționat că dacă utilizatorul nu este deloc autentificat, funcția va returna tot 0 (sau false)

Bysander Bysander
22 apr. 2015 19:34:51
1

Întotdeauna folosește get_current_user_id(); sub acțiunea init.

Mai jos este exemplul:

add_action('init', 'myFunction');

function myFunction(){

 $user_ID= get_current_user_id();   

   echo"Utilizatorul numărul $user_ID este autentificat";
}
24 oct. 2014 10:22:44
Comentarii

În cazul în care under înseamnă acțiunea init, sau orice altă acțiune care este apelată după aceasta, corect?

jgangso jgangso
28 feb. 2020 10:55:18
0

După cum au menționat și alții: Dacă apelezi funcția prea devreme, va returna valoarea 0.

O metodă bună de a verifica dacă este "prea devreme" sau nu este următoarea verificare:

// NU verifica pentru acțiunea 'set_current_user', ci pentru 'init'!!
if ( ! did_action( 'init' ) ) {
    _doing_it_wrong( __FUNCTION__, 'get_current_user_id() apelat înainte de hook-ul init', null );
}
$user_id = get_current_user_id();

Motivul pentru care nu folosim did_action('set_current_user') este:

Dacă alt cod sau alt plugin apelează get_current_user_id() prea devreme, va declanșa rularea hook-ului set_current_user. Totuși, datele despre utilizatorul curent nu sunt corecte în acest moment, așa că a te baza pe acest hook nu este o idee bună - doar când este executat init putem fi siguri că avem utilizatorul corect!

22 apr. 2015 16:48:41
0

Pentru versiuni WordPress > 3.4:

Folosește:

$current_user_id = get_current_user_id();

Pentru versiuni WordPress < 3.4:

Documentația spune că dacă versiunea este mai mică decât 3.4, folosește-o cu init:

add_action('init', 'get_your_current_user_id');
function get_your_current_user_id(){
        $your_current_user_id = get_current_user_id();
        //fă ceva cu el aici
}

Poți verifica documentația: wp_get_current_user

7 iun. 2016 04:57:02