Wenn der aktuelle Benutzer ein Administrator oder Editor ist
-
-
`if (current_user_can ('editor')|| current_user_can ('Administrator'))``if( current_user_can('editor') || current_user_can('administrator') )`
- 10
- 2014-01-30
- Shazzad
-
5 Antworten
- Stimmen
-
- 2014-01-30
Erste Antwort,nicht WordPress-bezogen,daes sichnur um PHP handelt: Verwenden Sie den logischen Operator "ODER":
<?php if( current_user_can('editor') || current_user_can('administrator') ) { ?> // Stuff here for administrators or editors <?php } ?>
Wenn Siemehr als zwei Rollen überprüfenmöchten,können Sie überprüfen,ob sich die Rollen des aktuellen Benutzersin einem Array von Rollenbefinden,z. B.:
$user = wp_get_current_user(); $allowed_roles = array('editor', 'administrator', 'author'); <?php if( array_intersect($allowed_roles, $user->roles ) ) { ?> // Stuff here for allowed roles <?php } ?>
current_user_can
kannjedochnichtnurmit Benutzern verwendet werden. Rollenname,aber auchmit Funktionen.Sobald sowohl Redakteure als auch Administratoren Seitenbearbeiten können,kannesfür Ihr Lebeneinfacher sein,nachfolgenden Funktionen zu suchen:
<?php if( current_user_can('edit_others_pages') ) { ?> // Stuff here for user roles that can edit pages: editors and administrators <?php } ?>
Weitere Informationen zu Funktionenfinden Sie hier .
First answer, not WordPress-related because it is just only PHP: Use the logic "OR" operator:
<?php if( current_user_can('editor') || current_user_can('administrator') ) { ?> // Stuff here for administrators or editors <?php } ?>
If you want to check more than two roles, you can check if the roles of the current user is inside an array of roles, something like:
$user = wp_get_current_user(); $allowed_roles = array('editor', 'administrator', 'author'); <?php if( array_intersect($allowed_roles, $user->roles ) ) { ?> // Stuff here for allowed roles <?php } ?>
However,
current_user_can
can be used not only with users' role name, but also with capabilities.So, once both editors and administrators can edit pages, your life can be easier checking for those capabilities:
<?php if( current_user_can('edit_others_pages') ) { ?> // Stuff here for user roles that can edit pages: editors and administrators <?php } ?>
Have a look here for more information on capabilities.
-
Müssen Sie überprüfen,ob `is_logged_in ();`?do you need to check if `is_logged_in();` ?
- 1
- 2017-05-01
- RobBenz
-
@ RobBenznein,in jedem Fall.Da "current_user_can ()"immerfalse zurückgibt,wenn der Benutzernicht angemeldetist,und "wp_get_current_user ()"einen Benutzer ohne Rolle zurückgibt,wenn der Benutzernicht angemeldetist,ist "array_intersect ()"immerfalse.@RobBenz no, in any of the cases. Because `current_user_can()` always returns false if the user is not logged in, and `wp_get_current_user()` will return an user without any role if the user is not logged in, so the `array_intersect()` will always be false.
- 3
- 2017-05-01
- gmazzap
-
Im PHPDoc der Funktion `current_user_can ()` sehen wir die Zeile "_Während die Überprüfungbestimmter Rollen anstelleeiner Funktionteilweise unterstützt wird,wird von dieser Vorgehensweise abgeraten,da dies zu unzuverlässigen Ergebnissenführen kann_".Daher denkeich,dassesbesserist,die Verwendung von Rollen zu vermeiden,während die Fähigkeiteines Benutzers überprüft wird :-)In the PHPDoc of the `current_user_can()` function, we can see the line "_While checking against particular roles in place of a capability is supported in part, this practice is discouraged as it may produce unreliable results_". So I think it would be better to avoid using roles while checking for a user's capability :-)
- 3
- 2017-09-01
- Erenor Paz
-
Wennich die Methode "array_intersect" verwende,erhalteichin unserem Serverfehlerprotokolleine PHP-Warnungmit der Aufschrift "array_intersect (): Argument 2ist kein Array".Liegt das daran,dass die Benutzer,die überprüft werden,nureine Rolle haben?When I use the `array_intersect` method, I get a PHP warning in our server error log saying `array_intersect(): Argument #2 is not an array`. Is this because the user(s) it's checking only have one Role?
- 0
- 2018-01-23
- Garconis
-
@ Garconisnormalerweise sollteesein Array sein.Ausirgendeinem Grund scheintesfür Sie kein Array zu sein.`array_intersect ($ allow_roles,(array) $ user-> role)`funktioniert ohne Probleme.@Garconis normally it should be an array. For some reason it seems for you is not an array. `array_intersect($allowed_roles, (array)$user->roles )` will work with no issues.
- 0
- 2018-01-25
- gmazzap
-
Ich würde davon abraten,gegen Rollen zuprüfen ... undehergegen Fähigkeiten.Esisteinfacher,eine Funktion zueiner Reihe von Rollen zuentfernen oder hinzuzufügen ...esistexpliziter.`current_user_can ('edit_orderform')` zum Beispiel ... vielleicht sollteein Salesrep NUR das Bestellformularbearbeiten können ... abernicht die Rechte haben,Inhalte hinzuzufügen.Dasexplizite Gewähren dieser Funktionisteine explizitere Berechtigungsstruktur als die Rolleeines Benutzers.Ingrößeren Organisationentragen Menschenmehrere Hüte.Sie können Abonnenten haben,diemehr Zugriff haben alsnur zu lesen.I'd advise against checking against roles... and rather against capabilities. It's easier to remove or add a capability to a set of roles... it's more explicit. `current_user_can('edit_orderform')` for example... maybe a Salesrep should ONLY be able to edit the order form... but not have the rights to add content. Explicitly granting that capability is a more explicit permissions structure than what role a user is. People wear multiple hats in larger organizations. you can have subscribers that have more access than just reading.
- 0
- 2019-05-13
- Armstrongest
-
- 2019-01-06
Erstens sollte
current_user_can()
nicht zum Überprüfen der Rolleeines Benutzers verwendet werden. Es sollte verwendet werden,um zu überprüfen,obein Benutzer übereine bestimmte -Funktion verfügt.Zweitensmüssen Sie sichnichtmit der Rolle des Benutzersbefassen,sondern sich auf Funktionen konzentrieren. Siemüssen sichnicht darum kümmern,Dinge wie dasin der ursprünglichen Fragegestellte Problem zutun (bei dem überprüft wird,ob der Benutzerein Administrator oderein Administratorist)Editor).Wenn stattdessen
current_user_can()
wiebeabsichtigt verwendet wird,um die Fähigkeiteneines Benutzers zu überprüfen,nicht seine Rolle,benötigen Sie diebedingte Prüfungnicht,umeine zuenthalten"oder" (||) Test.Zum Beispiel:if ( current_user_can( 'edit_pages' ) ) { ...
edit_pagesisteine Funktion sowohl von Administrator- als auch von Editorrollen,jedoch keineniedrigeren Rollen wie Autoren.So sollte
current_user_can()
verwendet werden.First,
current_user_can()
should not be used to check a user's role - it should be used to check if a user has a specific capability.Second, rather than being concerned with the user's role but instead focusing on capabilities, you don't have to bother with doing things like the problem asked about in the original question (which is checking if the user is an administrator OR an editor). Instead, if
current_user_can()
was being used as intended, which is to check for a user's capabilities, not their role, you wouldn't need the conditional check to contain an "or" (||) test. For example:if ( current_user_can( 'edit_pages' ) ) { ...
edit_pages is a capability of both administrator and editor roles, but not any lower roles such as authors. This is how
current_user_can()
was intended to be used.-
** Bittebeachten Sie **: Hochrangige WP-Entwickler stimmen dieser Antwort zu.Sie sollten versuchen,die Rollenprüfung so weit wiemöglich zu vermeiden. Verwenden Sie Funktionen.Ich arbeite derzeit aneinem Projektmit mehreren Rollen,dienur die Obergrenze "Lesen" haben.Dieeinzige Lösungist die Rollenprüfungfürmich.Entschuldigung,ich kann den Linknichtfinden,es wareine offene Diskussion über den WP Github.**Please note**: High level WP devs agree with this answer. You should try to avoid role checking as much as possible, use capabilties. I'm currently working on a project with multiple roles that only have the 'read' cap. The only solution is role checking for me. Sorry, I can't find the link, it was an open discussion on the WP Github.
- 3
- 2019-04-26
- Bjorn
-
Dies sollte die akzeptierte Antwort sein,IMO.`current_user_can` sollteim Allgemeinenfür Funktionen verwendet werden,nichtfür Rollen.This should be the accepted answer, IMO. `current_user_can` should generally be used for capabilities, not roles.
- 1
- 2019-05-13
- Armstrongest
-
+1 dazu vermeiden,Rollen über `current_user_can ()` zu überprüfen.Wenn Sie Rollennach Schlüssel überprüfenmöchten,führen Sieeine Rollenprüfung anstelleeiner Obergrenzenprüfung durch :)+1 to this, avoid checking roles via `current_user_can()`. If you want to check roles by key then perform a role check instead of a cap check :)
- 0
- 2020-03-05
- William Patton
-
Wasist dann die richtige Funktion,um Benutzerrollenexplizit und sicher zu überprüfen?Es scheintein bisschen schwer zu sein,das zufinden (falls vorhanden).@BjornWhat is the proper function then, for checking user roles explicitly & safely? It seems, it's a bit hard to find that (if exists). @Bjorn
- 0
- 2020-04-15
- Viktor Borítás
-
@Viktor Borítás Auf dieser Seitegibt esmehreregültige Lösungen.Verwenden Sie siejedochnur,wenn "current_user_can ()" keine Optionist.Außerdembasiertmein Kommentarmehr auf Sicherheit.Wenn Siebeispielsweisein denmeisten Fällen den Inhaltfürbestimmte Benutzereinschränkenmöchten,isteine Funktionsprüfungfür diese Aufgabe ausreichend.@Viktor Borítás There are multiple valid solutions on this page. But only use them if `current_user_can()` is not an option. Also, my comment is more security based. For example, if you want to restrict content for specific users in most cases a capability check is sufficient for this task.
- 1
- 2020-04-16
- Bjorn
-
- 2019-08-26
Wiein der Antwort von @butlerblog angegeben, sollten Sie current_user_cannicht verwenden,umeine Rolle zu überprüfen
Dieser Hinweis wurde speziellin der PHP-Dokumentation der Funktion
aufgerufen wirdhas_cap
hinzugefügt,die voncurrent_user_can
Obwohl die Überprüfungeiner Rolle anstelleeiner Funktionteilweise unterstützt wird,wird von dieser Vorgehensweise abgeraten,da dies zu unzuverlässigen Ergebnissenführen kann.
Der
$user->roles
wiefolgt zu überprüfen:if( ! function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ) { $user = get_userdata( get_current_user_id() ); if( ! $user || ! $user->roles ){ return false; } if( is_array( $role ) ){ return array_intersect( $role, (array) $user->roles ) ? true : false; } return in_array( $role, (array) $user->roles ); } }
Hier sindeinige Hilfsfunktionen,dieich dazu verwende (daichmanchmalnichtnur den aktuellen Benutzer habenmöchte):
if( ! function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ){ return user_has_role_by_user_id( get_current_user_id(), $role ); } } if( ! function_exists( 'get_user_roles_by_user_id' ) ){ function get_user_roles_by_user_id( $user_id ) { $user = get_userdata( $user_id ); return empty( $user ) ? array() : $user->roles; } } if( ! function_exists( 'user_has_role_by_user_id' ) ){ function user_has_role_by_user_id( $user_id, $role ) { $user_roles = get_user_roles_by_user_id( $user_id ); if( is_array( $role ) ){ return array_intersect( $role, $user_roles ) ? true : false; } return in_array( $role, $user_roles ); } }
Dann können Sieeinfach Folgendestun:
current_user_has_role( 'editor' );
oder
current_user_has_role( array( 'editor', 'administrator' ) );
As @butlerblog reply stated, you should not use current_user_can to check against a role
This notice is specifically added in the PHP documentation of
has_cap
function which is called bycurrent_user_can
While checking against a role in place of a capability is supported in part, this practice is discouraged as it may produce unreliable results.
The CORRECT way to do this is to get the user and check the
$user->roles
, like this:if( ! function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ) { $user = get_userdata( get_current_user_id() ); if( ! $user || ! $user->roles ){ return false; } if( is_array( $role ) ){ return array_intersect( $role, (array) $user->roles ) ? true : false; } return in_array( $role, (array) $user->roles ); } }
Here's some helper functions I use to do this (as sometimes i don't want just current user):
if( ! function_exists( 'current_user_has_role' ) ){ function current_user_has_role( $role ){ return user_has_role_by_user_id( get_current_user_id(), $role ); } } if( ! function_exists( 'get_user_roles_by_user_id' ) ){ function get_user_roles_by_user_id( $user_id ) { $user = get_userdata( $user_id ); return empty( $user ) ? array() : $user->roles; } } if( ! function_exists( 'user_has_role_by_user_id' ) ){ function user_has_role_by_user_id( $user_id, $role ) { $user_roles = get_user_roles_by_user_id( $user_id ); if( is_array( $role ) ){ return array_intersect( $role, $user_roles ) ? true : false; } return in_array( $role, $user_roles ); } }
Then you can just do this:
current_user_has_role( 'editor' );
or
current_user_has_role( array( 'editor', 'administrator' ) );
-
- 2016-09-29
<?php if( current_user_can('editor')) : echo "welcome"; elseif( current_user_can('member')) : echo "welcome"; else : wp_die("<h2>To view this page you must first <a href='". wp_login_url(get_permalink()) ."' title='Login'>log in</a></h2>"); endif; ?>
<?php if( current_user_can('editor')) : echo "welcome"; elseif( current_user_can('member')) : echo "welcome"; else : wp_die("<h2>To view this page you must first <a href='". wp_login_url(get_permalink()) ."' title='Login'>log in</a></h2>"); endif; ?>
-
Es wäregroßartig,wenn Sieerklären könnten,wiees OP hilft.It would be great if you could explain as how it helps OP.
- 1
- 2016-09-29
- bravokeyl
-
Sie können zulassen,dassnur die Seite "Editor" oder "Mitglied" angezeigt wird. Sie können diesen Code direktin generic-page.php veröffentlichenYou can allow to see the page only "editor" or "member" you can post this code direct in generic-page.php
- 0
- 2016-09-29
- seowmx
-
Bitte lassen Sienichteinfach den Codefallen.Fügen Sie Kommentare und Erklärungen hinzu,wie dies das Problem des Fragestellers löst.Please don't just drop code. Add comments and some explanation how this solves the askers problem.
- 5
- 2016-09-29
- kraftner
-
Ihre Antwort lautet also Code-Duplizierungfürjede Rolle?So your answer is code duplication for each role?
- 0
- 2019-10-22
- Julix
-
- 2020-06-03
Die richtigen Antworten auf die obige Lösungsfrage sind durch Programmierengrundlegend:
if( current_user_can('administrator')) { <!-- only administrator will see this message --> } else { if( wp_get_current_user('editor')) { <!-- only editor but no administrator will see this message --> ?> <style type="text/css">#perhapsDIVremovalidentifier{ display:none; </style> } <?php } else { <!-- the user is neither editor or administrator --> }}
Kurz: Der Administrator wirdgefunden,aber wenn wir den Editor drücken,wird auch der Administratorgefunden.Wir lassen alsonur den Administrator durch undidentifizierennur den Editor.
Denken Sie daran,dass Sie diesen Codeimmer verwenden sollten,um den obigen Code aufzurufen,um die Verwendung von CPU-Code zuminimieren:
if(is_user_logged_in()){}
The correct answers to the above solution-question are by else programming basic:
if( current_user_can('administrator')) { <!-- only administrator will see this message --> } else { if( wp_get_current_user('editor')) { <!-- only editor but no administrator will see this message --> ?> <style type="text/css">#perhapsDIVremovalidentifier{ display:none; </style> } <?php } else { <!-- the user is neither editor or administrator --> }}
Brief: The administrator is found, but if we push editor the administrator is as well found. So we just let the administrator pass through and identify the editor only.
Remember you should always use this code to call that above to minimize cpu code usage:
if(is_user_logged_in()){}
-
Genau das stehtin der ** Frage ** und was der Autornicht will.That is exactly what is stated in the **question**, and what the author doesn't want.
- 0
- 2020-06-03
- fuxia
-
Ich habe kurz hinzugefügt,damit wir kein Missverständnis haben.Es war schwer,die anderen Regeln zubefolgen,glaubeich.I've added brief so that we have no misunderstanding. It was hard to follow the else rules I believe.
- 0
- 2020-06-04
- Dealazer
Wie kannich überprüfen,ob der aktuell angemeldete Benutzerein Administrator oderein Editorist?
Ich weiß,wiemanjedeseinzelnmacht:
Aber wie arbeiteich diese zusammen?Das heißt,der Benutzeristein Administrator oder Editor?