web-dev-qa-db-fra.com

Si l'utilisateur actuel est un administrateur ou un éditeur

Comment puis-je vérifier si l'utilisateur actuellement connecté est un administrateur ou un éditeur?

Je sais faire chacun individuellement:

<?php if(current_user_can('editor')) { ?> 
    <!-- Stuff here for editors -->
<?php } ?>

<?php if(current_user_can('administrator')) { ?>
    <!-- Stuff here for administrators -->
<?php } ?>

Mais comment puis-je les travailler ensemble? C'est-à-dire que l'utilisateur est un administrateur ou un éditeur?

90
andy

Première réponse, pas liée à WordPress car il ne s'agit que de PHP: Utilisez l'opérateur logique "OU":

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

Si vous souhaitez vérifier plus de deux rôles, vous pouvez vérifier si les rôles de l'utilisateur actuel se trouvent dans un tableau de rôles, comme par exemple:

$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 } ?>

Cependant, current_user_can peut être utilisé non seulement avec le nom de rôle de l'utilisateur, mais également avec des fonctionnalités.

Ainsi, une fois que les éditeurs et les administrateurs peuvent modifier des pages, votre vie peut être plus facile à vérifier pour ces fonctionnalités:

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

Regardez ici pour plus d'informations sur les capacités.

177
gmazzap

Tout d'abord, current_user_can() ne doit pas être utilisé pour vérifier le rôle d'un utilisateur, mais pour vérifier si un utilisateur a une capacité spécifique.

Deuxièmement, plutôt que de vous préoccuper du rôle de l'utilisateur mais de vous concentrer sur les capacités, vous n'avez pas à vous préoccuper du problème évoqué dans la question initiale (qui consiste à vérifier si l'utilisateur est un administrateur OR un éditeur). Au lieu de cela, si current_user_can() était utilisé comme prévu, c'est-à-dire pour vérifier les capacités d'un utilisateur, pas leur rôle, vous n'auriez pas besoin que la vérification conditionnelle contienne un test "ou" (||). Par exemple:

if ( current_user_can( 'edit_pages' ) ) { ...

edit_pages est une fonctionnalité des rôles d'administrateur et d'éditeur, mais pas de rôles inférieurs tels que des auteurs. Voici comment current_user_can() devait être utilisé.

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