it-swarm.com.de

Wenn der aktuelle Benutzer ein Administrator oder ein Editor ist

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? Ist der Benutzer ein Administrator oder ein Redakteur?

90
andy

Erste Antwort, nicht auf WordPress bezogen, da es sich nur um PHP handelt: Verwenden Sie den logischen "OR" -Operator:

<?php if( current_user_can('editor') || current_user_can('administrator') ) {  ?>
    // Stuff here for administrators or editors
<?php } ?>

Wenn Sie mehr als zwei Rollen prüfen möchten, können Sie prüfen, ob sich die Rollen des aktuellen Benutzers in einem Array von Rollen befinden, wie z.

$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 kann jedoch nicht nur mit dem Rollennamen des Benutzers verwendet werden, sondern auch mit Funktionen.

Sobald also sowohl Redakteure als auch Administratoren Seiten bearbeiten können, kann es für Sie einfacher sein, nach diesen Funktionen zu suchen:

<?php if( current_user_can('edit_others_pages') ) {  ?>
    // Stuff here for user roles that can edit pages: editors and administrators
<?php } ?>

Schauen Sie hier nach, um weitere Informationen zu Funktionen zu erhalten.

177
gmazzap

Erstens sollte current_user_can() nicht verwendet werden, um die Rolle eines Benutzers zu überprüfen - es sollte verwendet werden, um zu überprüfen, ob ein Benutzer über eine bestimmte Fähigkeit verfügt.

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 ist OR ein Bearbeiter). Wenn stattdessen current_user_can() wie beabsichtigt verwendet wird, um die Funktionen eines Benutzers zu überprüfen, nicht deren Rolle, brauchen 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 sollte current_user_can() verwendet werden.

6
butlerblog
<?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;
?>
0
seowmx