Qu’est-ce qu’une capability WordPress

Le concept de capability est le  » cœur  » de la gestion des accès WordPress car il définit littéralement ce que l’utilisateur peut ou ne peut pas faire. La documentation officielle de WordPress décrit la capacité comme la permission d’effectuer un ou plusieurs types de tâches et chaque utilisateur authentifié peut avoir au moins une capacité soit directement attribuée, soit héritée d’un ou plusieurs rôles parents.

La liste de toutes les capacités standard pour le noyau de WordPress se trouve dans l’article Rôles et capacités.

Alors que la plupart des capacités sont auto-explicatives sur la base de son nom (edit_posts, manage_options, remove_users etc.), il y a encore beaucoup de confusion associée à ce dont elles sont réellement responsables et pourquoi même lorsque l’utilisateur a une certaine capacité assignée, il n’est toujours pas autorisé à effectuer des tâches anticipées.

Il n’y a pas de bonne réponse à cette question car beaucoup de capacités de base de WordPress ont des exceptions. Par exemple, lorsque le site web est configuré en multisite et que l’utilisateur n’est pas un super administrateur, alors même si la capacité create_users est accordée, l’utilisateur ne pourra toujours pas créer de nouvel utilisateur ; ou la capacité manage_links sera ignorée si l’option link_manager_enabled est désactivée.

Sur la base de la version 4.9 de WordPress, il y a au moins 65 exceptions définies dans le core donc n’hésitez pas à me contacter si vous avez des difficultés avec la gestion des capacités.

Toutes les capacités basées sur les rôles sont stockées dans la table wp_options avec le nom d’option wp_user_roles tandis que les capacités basées sur les utilisateurs sont stockées dans la table wp_usermeta avec le nom de clé méta wp_capabilities. Le préfixe wp_ peut varier en fonction de la valeur de la variable globale $table_prefix définie dans le fichier wp-config.php.

La liste des capacités est le tableau associé où la clé de l’élément est la capacité elle-même tandis que la valeur de l’élément est la règle qui définit si la capacité est accordée ou refusée (1 signifie que la capacité est accordée tandis que 0 – refusée).

Liste des capacités de WordPress

WordPress dispose de la fonction de base current_user_can qui est utilisée pour vérifier si l’utilisateur actuellement connecté a une certaine capacité cependant la fonction déclenche une fonctionnalité assez complexe qui dans certains cas peut renvoyer un résultat inattendu. Tout dépend du nombre de plugins actifs ou de thème(s) qui s’accrochent à la fonction current_user_can.

Comme il a été mentionné ci-dessus, certaines capacités ont des exceptions qui sont définies de manière programmatique dans la fonction map_meta_cap. En outre, toute solution tierce peut s’accrocher au processus avec le filtre user_has_cap et écraser le résultat.

La capacité est considérée comme accordée si la règle contient une valeur non vide.

Veuillez noter ! Depuis 2011, j’ai personnellement l’expérience que quelques cas étaient d’autres plugins incorrectement accroché dans la fonction current_user_can. Donc, si quelque chose ne fonctionne pas comme prévu, il est moins probable que cela soit lié à un quelconque plugin ou thème, mais plutôt à une fuite de connaissances dans les exceptions de capacité.

Comment fonctionne réellement la capacité ?

La capacité elle-même est inutile, sauf si, elle est référencée dans le code. Techniquement, cela signifie que pour qu’une capacité fonctionne, quelque part dans le code, il devrait y avoir une vérification programmatique si l’utilisateur authentifié a une capacité spécifique ou non. C’est à un développeur de définir quelle partie du site web (de la fonctionnalité) est protégée avec quelle capacité.

Note ! Tout ce qui se trouve dans WordPress n’a pas de capacité associée. Par exemple, vous ne trouverez pas de capability responsable d’afficher ou de cacher la recherche d’articles au-dessus de la liste des articles sur le Backend ou même de capability qui restreint l’accès au backend.

Pour apprendre à restreindre l’accès à toute la zone du backend pour les utilisateurs authentifiés, consultez l’article Comment verrouiller le backend de WordPress.

Heureusement, une grande partie de la personnalisation peut être accomplie avec les hooks natifs de WordPress mais cela nécessite un développement personnalisé. Pour plus d’informations sur les hooks de WordPress, consultez l’article What is the WordPress hook.

Pouvez-vous créer une capacité personnalisée ?

Divers plugins ou thèmes ajoutent des capacités personnalisées au noyau de WordPress, soit en les stockant dans la base de données, soit en les enregistrant dynamiquement pendant le chargement du site Web. Il est difficile de dire quelle est la bonne méthode, cependant il est beaucoup plus difficile de gérer l’accès à un site web avec des capacités ajoutées dynamiquement car seuls certains plugins ou thèmes les connaissent et contrôlent le moment où elles sont enregistrées.

Les capacités ajoutées dynamiquement sont généralement enregistrées avec le hook init en modifiant la propriété publique get_current_user()->allcaps.

Avec le plugin AAM, vous disposez de tout l’ensemble d’outils nécessaires pour gérer l’accès aux capacités du site WordPress pour des rôles ou même des utilisateurs individuels. Pour plus d’informations à ce sujet, veuillez consulter l’article Comment gérer les capacités de WordPress.

Conclusion

Les capacités de WordPress définissent ce que les utilisateurs peuvent ou ne peuvent pas faire au sein du site web. Généralement, elles sont plutôt conçues pour les tâches Backend et rarement utilisées pour une quelconque fonctionnalité Frontend.

La capacité elle-même est inutile à moins qu’elle ne soit prise en charge dans le code. Donc, si vous n’êtes pas familier avec le codage PHP, veuillez consulter votre développeur ou tout simplement me contacter avant d’envisager de créer une capacité personnalisée.