Wie kann ich überprüfen, ob der aktuell angemeldete Benutzer ein Administrator oder ein Editor ist?
Ich weiß, wie man jedes für sich macht:
<?php if(current_user_can('editor')) { ?>
<!-- Stuff here for editors -->
<?php } ?>
<?php if(current_user_can('administrator')) { ?>
<!-- Stuff here for administrators -->
<?php } ?>
Aber wie arbeite ich diese zusammen? Dh der Benutzer ist Administrator oder Redakteur?
users
user-roles
Andy
quelle
quelle
if( current_user_can('editor') || current_user_can('administrator') )
Antworten:
Erste Antwort, nicht auf WordPress bezogen, da es sich nur um PHP handelt: Verwenden Sie den logischen "OR" -Operator:
Wenn Sie mehr als zwei Rollen prüfen möchten, können Sie prüfen, ob die Rollen des aktuellen Benutzers in einem Array von Rollen enthalten sind, wie z.
Allerdings
current_user_can
kann verwendet werden , nicht nur mit Benutzerrollennamen, sondern auch mit Fähigkeiten.Sobald also sowohl Redakteure als auch Administratoren Seiten bearbeiten können, kann es für Sie einfacher sein, nach diesen Funktionen zu suchen:
Werfen Sie einen Blick hier für weitere Informationen über Fähigkeiten.
quelle
is_logged_in();
?current_user_can()
immer false zurückgibt, wenn der Benutzer nicht angemeldet ist, undwp_get_current_user()
einen Benutzer ohne Rolle zurückgibt, wenn der Benutzer nicht angemeldet ist, ist derarray_intersect()
immer false.current_user_can()
Funktion sehen wir die Zeile " Obwohl das Prüfen auf bestimmte Rollen anstelle einer Funktion teilweise unterstützt wird, wird von dieser Vorgehensweise abgeraten, da dies zu unzuverlässigen Ergebnissen führen kann ". Ich denke, es wäre besser, Rollen zu vermeiden, während man nach den Fähigkeiten eines Benutzersarray_intersect
Methode verwende, wird eine PHP-Warnung in unserem Server-Fehlerprotokoll angezeigtarray_intersect(): Argument #2 is not an array
. Liegt das daran, dass die Benutzer, die überprüft werden, nur eine Rolle haben?array_intersect($allowed_roles, (array)$user->roles )
wird ohne Probleme funktionieren.Erstens
current_user_can()
sollte nicht verwendet werden, um die Rolle eines Benutzers zu überprüfen - es sollte verwendet werden, um zu überprüfen, ob ein Benutzer eine bestimmte Fähigkeit hat .Zweitens müssen Sie sich nicht mit der Rolle des Benutzers befassen, sondern sich auf die Funktionen konzentrieren. Sie müssen sich nicht mit Dingen wie dem in der ursprünglichen Frage gestellten Problem befassen (bei dem überprüft wird, ob der Benutzer ein Administrator ODER ein Editor ist). Wenn Sie stattdessen
current_user_can()
wie beabsichtigt verwenden, um die Funktionen eines Benutzers und nicht seine Rolle zu überprüfen, benötigen Sie die bedingte Prüfung nicht, um einen "oder" -Test (||) zu enthalten. Zum Beispiel:if ( current_user_can( 'edit_pages' ) ) { ...
edit_pages ist eine Funktion sowohl für Administrator- als auch für Editorrollen, jedoch nicht für untergeordnete Rollen wie Autoren. So
current_user_can()
sollte es benutzt werden.quelle
current_user_can
sollte im Allgemeinen für Funktionen verwendet werden, nicht für Rollen.Wie in der Antwort von @butlerblog angegeben, sollten Sie current_user_can nicht zum Überprüfen einer Rolle verwenden
Dieser Hinweis wurde speziell in die PHP-Dokumentation der
has_cap
Funktion aufgenommen, die von aufgerufen wirdcurrent_user_can
Die RICHTIGE Möglichkeit, dies zu tun, besteht darin, den Benutzer zu holen und das zu überprüfen
$user->roles
, wie folgt :Hier sind einige Hilfsfunktionen, die ich dazu benutze (da ich manchmal nicht nur den aktuellen Benutzer haben möchte):
Dann können Sie dies einfach tun:
current_user_has_role( 'editor' );
oder
current_user_has_role( array( 'editor', 'administrator' ) );
quelle
quelle