Wie überprüfe ich, ob ein Benutzer eine bestimmte Rolle spielt?
6 Antworten
- Stimmen
-
- 2010-12-08
Wenn Sie diesnurfür den aktuellen Benutzerbenötigen,akzeptiert
current_user_can()
sowohl Rollen als auch Funktionen.UPDATE : Die Übergabeeines Rollennamens an
current_user_can()
funktioniertnichtmehr ordnungsgemäß (siehe # 22624 ).Stattdessenmöchten Siemöglicherweise die Benutzerrolle überprüfen:$user = wp_get_current_user(); if ( in_array( 'author', (array) $user->roles ) ) { //The user has the "author" role }
If you only need this for current user
current_user_can()
accepts both roles and capabilities.UPDATE: Passing a role name to
current_user_can()
is no longer guaranteed to work correctly (see #22624). Instead, you may wish to check user role:$user = wp_get_current_user(); if ( in_array( 'author', (array) $user->roles ) ) { //The user has the "author" role }
-
Ich weiß,dass dieser Beitrag vor langer Zeitbeantwortet wurde,aber wennjemand hierher kommt ... schauen Sienocheinmalin der Dokumentationnach current_user_can () -> "Übergeben Sie keinen Rollennamen an current_user_can (),da diesnichtgarantiertistfunktionieren ordnungsgemäß (siehe # 22624). Stattdessenmöchten Siemöglicherweise die von AppThemes zusammengestellte Funktion zum Überprüfen der Benutzerrolle ausprobieren. "(http://codex.wordpress.org/Function_Reference/current_user_can)I know this post is answered a long time ago but if someone happens to get here... look at the documentation once more for current_user_can() -> "Do not pass a role name to current_user_can(), as this is not guaranteed to work correctly (see #22624). Instead, you may wish to try the check user role function put together by AppThemes." (http://codex.wordpress.org/Function_Reference/current_user_can)
- 10
- 2014-01-28
- bestprogrammerintheworld
-
^ In derif-Anweisungfehlteine Klammer^ There is a bracket missing in the if statement
- 1
- 2015-06-04
- Aajahid
-
@Aajahidbearbeitet :)@Aajahid edited :)
- 1
- 2015-06-04
- Rarst
-
Wennichnicht Multisite verwende,bevorzugeichimmernoch die Einfachheit von "current_user_can ("editor ")"If not using multisite, I still prefer the simplicity of `current_user_can('editor')`
- 1
- 2020-01-25
- Jules
-
- 2012-06-11
Ich habenacheiner Möglichkeitgesucht,die Rolleeines Benutzersmithilfe der Benutzer-ID zuermitteln.Folgendes habeichmir ausgedacht:
function get_user_roles_by_user_id( $user_id ) { $user = get_userdata( $user_id ); return empty( $user ) ? array() : $user->roles; }
Dann könnteeine
is_user_in_role()
-Funktion wiefolgtimplementiert werden:function is_user_in_role( $user_id, $role ) { return in_array( $role, get_user_roles_by_user_id( $user_id ) ); }
I was looking for a way to get a user's role using the user's id. Here is what I came up with:
function get_user_roles_by_user_id( $user_id ) { $user = get_userdata( $user_id ); return empty( $user ) ? array() : $user->roles; }
Then, an
is_user_in_role()
function could be implemented like so:function is_user_in_role( $user_id, $role ) { return in_array( $role, get_user_roles_by_user_id( $user_id ) ); }
-
funktioniertgutfürmich,um dieerste Rolleeinem Benutzer zuzuweisen.works fine for me to get the first role assigned to a user.
- 1
- 2012-10-10
- Q Studio
-
Wasistmit allen dem Benutzer zugewiesenen Rollen?What about all the roles assigned to the user?
- 0
- 2017-04-10
- Sahu V Kumar
-
@Vishal Kumar Hiermit werden alle dem Benutzer zugewiesenen Rollen überprüft.@Vishal Kumar this will check against all roles assigned to the user.
- 1
- 2017-04-10
- Stephen M. Harris
-
Diese Funktionexistiertnicht,nicht sicher,ob sienur alt war oder was,aber Sie sollten die Antwort oben oder die,dieich untengepostet habe,verwendenThis function does not exist, not sure if it was just old or what, but you should use the answer above or the one I posted below
- 0
- 2017-11-16
- sMyles
-
- 2017-11-16
Sie können aucheinfachein neues Benutzerobjekterstellen:
$user = new WP_User( $user_id ); if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) { return true; }
Ichbin mirnicht sicher,in welcher Version
get_user_roles_by_user_id
entfernt wurde,aberesist keine verfügbare Funktionmehr.You can also just create a new user object:
$user = new WP_User( $user_id ); if ( ! empty( $user->roles ) && is_array( $user->roles ) && in_array( 'Some_role', $user->roles ) ) { return true; }
Not sure what version
get_user_roles_by_user_id
was removed in, but it's no longer an available function.-
Diesistpraktisch,wennich andere Methoden der WP_User-Klasse aufrufenmuss.This is handy when I have to call other methods of the WP_User class.
- 0
- 2019-09-25
- Justin Waulters
-
- 2017-11-28
Hieristeine Funktion,dieeinen Benutzer undeine Rollefürmehr Flexibilität akzeptiert:
Funktionmy_has_role ($ user,$ role) { $ role=$ user-> role; returnin_array ($ role,(array) $ user-> role); }} if (my_has_role ($ user,'some_role')) { //Sachenmachen }}
Here is a function that accepts a user and role for greater flexibility:
function my_has_role($user, $role) { $roles = $user->roles; return in_array($role, (array) $user->roles); } if(my_has_role($user, 'some_role')) { //do stuff }
-
- 2019-10-02
Das Aufrufen von Rollenfür Benutzerobjekt
abrufen$user->roles
gibt nicht alle Rollen zurück.Der richtige Weg,um herauszufinden,ob der Benutzereine Rolle oder Fähigkeit hat,folgt.(Diesfunktioniertin wp Version 2.0.0 und höher.) Diefolgende Funktionfunktioniertmit der Benutzer-ID. Sie können die aktuelle Benutzer-ID über$current_user_id = get_current_user_id();
/** * Returns true if a user_id has a given role or capability * * @param int $user_id * @param string $role_or_cap Role or Capability * * @return boolean */ function my_has_role($user_id, $role_or_cap) { $u = new \WP_User( $user_id ); //$u->roles Wrong way to do it as in the accepted answer. $roles_and_caps = $u->get_role_caps(); //Correct way to do it as wp do multiple checks to fetch all roles if( isset ( $roles_and_caps[$role_or_cap] ) and $roles_and_caps[$role_or_cap] === true ) { return true; } }
Calling roles on User Object
$user->roles
do not return all the roles. The correct way to find if the user has a role or capability is following. (This works in wp version 2.0.0 and greater.) The following function works with user id you can get the current user id by$current_user_id = get_current_user_id();
/** * Returns true if a user_id has a given role or capability * * @param int $user_id * @param string $role_or_cap Role or Capability * * @return boolean */ function my_has_role($user_id, $role_or_cap) { $u = new \WP_User( $user_id ); //$u->roles Wrong way to do it as in the accepted answer. $roles_and_caps = $u->get_role_caps(); //Correct way to do it as wp do multiple checks to fetch all roles if( isset ( $roles_and_caps[$role_or_cap] ) and $roles_and_caps[$role_or_cap] === true ) { return true; } }
-
- 2020-07-27
Diesistein alter Beitrag,aber hieristeine universelle Funktion,die auf allen WordPress-Versionenfunktioniert.
if(!function_exists('is_user')): function is_user ($role=NULL, $user_id=NULL) { if(empty($user_id)){ $user = wp_get_current_user(); } else { if(is_numeric($user_id) && $user_id == (int)$user_id) { $user = get_user_by('id', (int)$user_id); } else if(is_string($user_id) && $email = sanitize_email($user_id)) { $user = get_user_by('email', $email); } else { return false; } } if(!$user) return false; return in_array( $role, (array)$user->roles, true ) !== false; } endif;
Mit dieser Funktion können Sie angemeldete Benutzernach Rolle odernach Benutzer-ID/E-Mail suchen.Akzeptieren Sie auch das Benutzerrollenarray.
This is old post but here is one universal function what working on the all WordPress versions.
if(!function_exists('is_user')): function is_user ($role=NULL, $user_id=NULL) { if(empty($user_id)){ $user = wp_get_current_user(); } else { if(is_numeric($user_id) && $user_id == (int)$user_id) { $user = get_user_by('id', (int)$user_id); } else if(is_string($user_id) && $email = sanitize_email($user_id)) { $user = get_user_by('email', $email); } else { return false; } } if(!$user) return false; return in_array( $role, (array)$user->roles, true ) !== false; } endif;
With this function you can search logged in user by role or by user ID/email. Also accept user roles array.
Ich habeeine ziemlich spezielle Anforderung,basierend auf der Rolle des aktuellen Benutzers unterschiedlichen Textin einer Feldbezeichnung auf der Benutzerprofilseite anzuzeigen.Ich kann anscheinendnicht herausfinden,wieich überprüfen kann,ob die aktuelle Verwendungein "Autor"ist.
Ich sucheeine Funktion wie:
Ich stellemir vor,dass dies ziemlicheinfachist,aberich habe zu lange ohne Antwortgesucht,also dachteich,ich würdees hierposten.