it-swarm.com.de

get_current_user_id () liefert 0?

Ich versuche, die ID des aktuell angemeldeten Benutzers in WordPress abzurufen. Ich habe den folgenden Code verwendet:

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

}

Der obige Code gibt das leere Ergebnis wie folgt zurück:

WP_User Object ( [data] => [ID] => 0 [caps] => Array ( ) [cap_key] => [roles] => Array ( ) [allcaps] => Array ( ) [filter] => )
5
PHP Learner

Unter Verwendung der wp_get_current_user () - Informationen im Codex verwendet die Funktion das globale Objekt $current_user und initialisiert es gegebenenfalls vor der Verwendung. Wie bereits erwähnt, verwendet get_current_user_id() diese Funktion im Backend.

Betrachten Sie /wp-includes/user.php , Zeilen 323-327 (die Funktionsdefinition für diesen Code). Am Ende lautet der Rückgabewert return ( isset( $user->ID ) ? (int) $user->ID : 0 ); - dieser Code gibt 0 zurück, wenn der angemeldete Benutzer nicht verfügbar ist.

Verwenden Sie den Befehl init oder eine nachfolgende Aktion, um diese Funktion aufzurufen. Das Aufrufen außerhalb einer Aktion kann zu Problemen führen. Siehe # 14024 für Details.

Dies stammt aus der Dokumentation für wp_get_current_user. Wenn Sie diesen Code in einer Vorlage verwenden, können Sie sicher sein, dass init bereits aufgerufen wurde. Wenn Sie jedoch zufällig nach den Benutzerinformationen greifen, bevor init-Aktion aufgerufen wird, erhalten Sie keinen aktuellen Benutzer. Dies erklärt, warum Sie die Benutzer-ID erhalten haben, als Sie diese Aktionen zu functions.php hinzugefügt haben (da diese Aktionen nach init stattfinden), wohingegen es mit Ihrem ursprünglichen Code nicht klar ist, wann Sie das aufrufen.

Auf der Seite Plugin API finden Sie eine allgemeine Vorstellung von der Reihenfolge, in der diese verschiedenen Aktionen aufgerufen werden.

5
Justin Bell

Verwenden Sie immer get_current_user_id(); unter init action.

Folgendes ist das Beispiel:

add_action('init', 'myFunction');

function myFunction(){

 $user_ID= get_current_user_id();   

   echo"User number $user_ID is loggedin";
}
2
Danish Jamil

Wie von den anderen erwähnt: Wenn Sie die Funktion zu früh aufrufen, wird der Wert 0 zurückgegeben.

Ein guter Weg, um zu überprüfen, ob es "zu früh" ist oder nicht, ist diese Art der Überprüfung:

// Do NOT check for action 'set_current_user', but for 'init'!!
if ( ! did_action( 'init' ) ) {
    _doing_it_wrong( __FUNCTION__, 'get_current_user_id() called before the init hook', null );
}
$user_id = get_current_user_id();

Der Grund, warum wir did_action('set_current_user') nicht verwenden, ist:

Wenn ein anderer Code oder ein anderes Plugin, das als get_current_user_id() bezeichnet wird, zu früh ist, wird der Hook set_current_user ausgeführt. Die aktuellen Benutzerdaten sind jedoch zu diesem Zeitpunkt nicht korrekt , daher ist es keine gute Idee, sich auf diesen Aktionshook zu verlassen - nur wenn init ausgeführt wird, können wir sicher sein, den richtigen Benutzer zu haben!

1
Philipp