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?
users
user-roles
Andy
la source
la source
if( current_user_can('editor') || current_user_can('administrator') )
Réponses:
Première réponse, pas liée à WordPress car il ne s'agit que de PHP: Utilisez l'opérateur logique "OU":
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:
Toutefois, ils
current_user_can
peuvent être utilisés non seulement avec le nom de rôle des utilisateurs, 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:
Regardez ici pour plus d'informations sur les capacités.
la source
is_logged_in();
?current_user_can()
renvoie toujours false si l'utilisateur n'est pas connecté, etwp_get_current_user()
retournera un utilisateur sans aucun rôle si l'utilisateur n'est pas connecté, donc cearray_intersect()
sera toujours false.current_user_can()
fonction, nous pouvons voir la ligne " Bien que la vérification par rapport à des rôles particuliers au lieu d'une capacité soit partiellement prise en charge, cette pratique est déconseillée car elle peut produire des résultats non fiables ". Donc, je pense qu'il serait préférable d'éviter d'utiliser des rôles tout en vérifiant la capacité d'un utilisateur :-)array_intersect
méthode, un avertissement PHP s'affiche dans le journal des erreurs de notre serveurarray_intersect(): Argument #2 is not an array
. Est-ce parce que les utilisateurs qu'il vérifie n'ont qu'un seul rôle?array_intersect($allowed_roles, (array)$user->roles )
fonctionnera sans problèmes.Tout d'abord,
current_user_can()
ne doit pas être utilisé pour vérifier le rôle d'un utilisateur, mais plutôt pour vérifier si un utilisateur dispose d'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 OU 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, et non son rôle, vous n'auriez pas besoin de la vérification conditionnelle pour contenir 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()
était destiné à être utilisé.la source
current_user_can
devrait généralement être utilisé pour des capacités, pas des rôles.Comme @butlerblog Reply a déclaré, vous ne devriez pas utiliser current_user_can pour vérifier un rôle
Cet avis est spécifiquement ajouté dans la documentation PHP de la
has_cap
fonction appelée parcurrent_user_can
La bonne façon de faire est d’obtenir l’utilisateur et de vérifier
$user->roles
, comme ceci:Voici quelques fonctions d'aide que j'utilise pour faire ceci (comme parfois je ne veux pas que l'utilisateur actuel):
Ensuite, vous pouvez simplement faire ceci:
current_user_has_role( 'editor' );
ou
current_user_has_role( array( 'editor', 'administrator' ) );
la source
la source