it-swarm.com.de

Wie rufe ich wp_get_current_user () in einem Plugin auf, wenn Plugins vor pluggable.php geladen werden?

Das aktuelle Ergebnis ist "PHP Fatal error: Aufruf der undefinierten Funktion wp_get_current_user ()", was sinnvoll ist, aber nicht hilft.

Ich muss $ current_user verwenden.

Hier ist der Code, den ich gerade benutze:

$wp->init(); 
do_action( 'init' ); // Check site status 
$file='http://xxxxxxxx.com/wp-admin/wp_includes/pluggable.php'; 
if ( is_multisite() ) { 
    if ( true !== ( $file = ms_site_check() ) ) { 
        require( $file );
        die(); 
    } 
    unset($file); 
}

// Get the current user's info 
$current_user = wp_get_current_user(); 

if ( !($current_user instanceof WP_User) ) 
    return; 

echo $current_user->user_login; 

function paf_uname(){ 
    return $current_user->user_login; 
}
10
PAFoster

Um die Antwort von @ EAMann zu ergänzen, müssen Sie Ihren wp_get_current_user()-Aufruf (oder einen beliebigen Aufruf, der versucht, auf eine in pluggable.php definierte Funktion zuzugreifen) in die 'plugins_loaded'-Aktion einschließen.

Wenn Sie dies also in Ihre functions.php-Datei einfügen, gehen Sie folgendermaßen vor:

add_action( 'plugins_loaded', 'get_user_info' );

function get_user_info(){
  $current_user = wp_get_current_user(); 

  if ( !($current_user instanceof WP_User) ) 
    return; 

  echo $current_user->user_login;

  // Do the remaining stuff that has to happen once you've gotten your user info
}

Beachten Sie, dass es uns nicht interessiert, was diese Funktion gibt zurück. Wir interessieren uns für wann diese Funktion wird ausgeführt, dh nachdem die pluggable.php-Datei hat Ihre wp_get_current_user()-Funktion geladen und definiert.

Erwarten Sie also nicht, mit dem Rückgabewert für diese Funktion etwas zu tun. Betrachten Sie diese Funktion stattdessen als Ausgangspunkt für alles, was Sie tun möchten, sobald Sie die Informationen des aktuellen Benutzers haben.

Mach es in einem Plugin

Der Vollständigkeit halber würden Sie wie folgt auf eine ähnliche steckbare Funktion im Kontext Ihres eigenen Plugins zugreifen:

(Fügen Sie dies in eine .php-Datei in Ihrem Ordner plugins ein.)

class WPSE_58429 {
    public function __construct(){
        add_action( 'plugins_loaded', array( $this, 'check_if_user_logged_in' ) );
    }

    public function check_if_user_logged_in(){
        if ( is_user_logged_in() ){
           // ... do stuff for your logged-in user
        }
    }
}

$wpse_58429_plugin = new WPSE_58429();

Ich habe diese Technik erfolgreich für einen sehr einfachen Plugin-Typ "Coming Soon" verwendet, der den Benutzer zu einer bestimmten Seite umleitet, wenn er nicht mit wp_safe_redirect() angemeldet ist.

8
Tom Auger

Das Problem ist, dass Sie versuchen, den Code direkt zu laden, anstatt mit einem WordPress-Hook. WordPress lädt eine Reihe von Code in einer bestimmten Reihenfolge (Sie können die Liste der Aktionen sehen, die in einer typischen Anfrage ausgelöst wurden im Codex ).

Wenn Sie versuchen, Ihren Code direkt auszulösen, werden Sie ausgeführt, bevor pluggable.php geladen wird. Und Sie sollten nicht versuchen, diese Datei direkt include(). Lassen Sie WordPress das für Sie tun.

Definieren Sie stattdessen eine Funktion, die die Benutzerinformationen abruft:

function wpse_58429() {
    // Get the current user's info 
    $current_user = wp_get_current_user(); 

    if ( !($current_user instanceof WP_User) ) 
        return; 

    return $current_user->user_login; 
}

Sie können diese Funktion dann problemlos an einer beliebigen Stelle in Ihrem Thema verwenden. Zum Beispiel:

echo wpse_58429();

Wenn Sie $current_user in einem anderen Code verwenden müssen, stellen Sie sicher, dass Sie diesen Code mit einer WordPress-Aktion auslösen ... Rufen Sie ihn nicht direkt auf, da er sonst ausgeführt wird, bevor die Funktion verfügbar ist.

3
EAMann

Es sieht so aus, als würden Sie Ihren Code laden, bevor bestimmte Funktionen verfügbar sind. Hast du es versucht:

 global $current_user; 
 //print_r($current_user); //all user related information
echo $current_user->ID; //get current user id 
0
Innate

Fügen Sie diese Funktion einfach Ihrer .php-Plugin-Datei hinzu

function is_logged_in(){
    if(function_exists( 'is_user_logged_in' )) {
        return is_user_logged_in();
    }
}

Rufen Sie es dann an einer beliebigen Stelle auf, um den Anmeldestatus des Benutzers abzurufen. Zum Beispiel:

echo is_logged_in();
0
mahdi azarm