web-dev-qa-db-de.com

Überprüfung der Benutzerrolle in einem benutzerdefinierten Plugin

In der functions.php-Datei meines Themas kann ich problemlos nach der Benutzerrolle suchen. Ich habe auf zwei verschiedene Arten nachgesehen:

if ( current_user_can('wholesale_customer') ) { 
    // my code
}

und

$current_user = wp_get_current_user();
if ( in_array( 'wholesale_customer', (array) $current_user->roles )) {
// my code
}

Beides funktioniert einwandfrei in meiner functions.php-Datei. Ich habe jedoch ein benutzerdefiniertes Plugin und füge einfach Folgendes hinzu:

$current_user = wp_get_current_user();

teil macht die gesamte Seite nicht funktioniert. Meine Frage lautet also: Wie überprüfe ich den aktuellen Benutzer in einem benutzerdefinierten Plugin?

2
Kristoffer M

Warum es bei einem Plugin nicht funktioniert:

Es funktioniert nicht für Plugins, da zum Zeitpunkt, an dem WordPress $current_user = wp_get_current_user(); in einem Plugin ausführt, die Funktion wp_get_current_user() noch nicht definiert ist. WordPress lädt diese Plugin-Datei, bevor diese benutzerbezogenen Funktionen definiert werden. Es funktioniert jedoch für Themen, da WordPress Themen lädt, nachdem es diese benutzerzentrierten Funktionen definiert und initiiert hat.

So bringen Sie es in ein Plugin:

Damit es in einem Plugin funktioniert, können Sie einen Aktions-Hook verwenden. Zum Beispiel wird es funktionieren, nachdem der Aktions-Hook plugins_loaded ausgelöst wurde. Wie der unten stehende CODE:

add_action( 'plugins_loaded', 'check_current_user' );
function check_current_user() {
    // Your CODE with user data
    $current_user = wp_get_current_user();

    // Your CODE with user capability check
    if ( current_user_can('wholesale_customer') ) { 
        // Your CODE
    }
}

Mit dem obigen CODE sehen Sie, dass das Überprüfen der Rolle mit current_user_can() und das Abrufen von Benutzerinformationen mit wp_get_current_user() in einem Plugin funktioniert.

3
Fayaz