it-swarm.com.de

Wie überprüfe ich, ob ein Benutzer eine bestimmte Rolle innehat?

Ich habe eine ziemlich spezielle Anforderung, auf der Benutzerprofilseite einen anderen Text in einer Feldbezeichnung anzuzeigen, der auf der Rolle des aktuellen Benutzers basiert. Ich kann nicht herausfinden, wie ich überprüfen kann, ob es sich bei der aktuellen Verwendung um einen "Autor" handelt.

Ich suche eine Funktion wie:

is_user_in_role($user, "author");

Ich stelle mir das ziemlich einfach vor, aber ich habe zu lange ohne Antwort gesucht, also dachte ich, ich würde es hier posten.

53
jessegavin

Wenn Sie dies nur für den aktuellen Benutzer benötigen current_user_can() akzeptiert sowohl Rollen als auch Funktionen.

UPDATE: Das Übergeben eines Rollennamens an current_user_can() funktioniert nicht mehr ordnungsgemäß (siehe # 22624 ). Stattdessen möchten Sie möglicherweise die Benutzerrolle überprüfen:

$user = wp_get_current_user();
if ( in_array( 'author', (array) $user->roles ) ) {
    //The user has the "author" role
}
101
Rarst

Ich suchte nach einer Möglichkeit, die Rolle eines Benutzers mithilfe der Benutzer-ID zu ermitteln. Folgendes habe ich mir ausgedacht:

function get_user_roles_by_user_id( $user_id ) {
    $user = get_userdata( $user_id );
    return empty( $user ) ? array() : $user->roles;
}

Dann könnte eine is_user_in_role() -Funktion folgendermaßen implementiert werden:

function is_user_in_role( $user_id, $role  ) {
    return in_array( $role, get_user_roles_by_user_id( $user_id ) );
}
9

Sie können auch einfach ein neues Benutzerobjekt erstellen:

$user = new WP_User( $user_id );

if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) {
    return true;
}

Ich bin nicht sicher, in welcher Version get_user_roles_by_user_id entfernt wurde, aber es ist keine verfügbare Funktion mehr.

1
sMyles

Hier ist eine Funktion, die einen Benutzer und eine Rolle für mehr Flexibilität akzeptiert:

 function my_has_role ($ benutzer, $ rolle) {
 $ rollen = $ benutzer-> rollen; 
 return in_array ($ role, (array) $ user-> rollers); 
} 
 
 if (my_has_role ($ user, 'some_role') { 
  //Sachen machen
}
0
Ben