Le système natif de WordPress propose cinq rôles principaux : Administrateur, Éditeur, Auteur, Contributeur et Abonné. Cependant, lors du développement d’une application métier ou d’un site sur mesure, ces rôles par défaut sont rarement suffisants. Vous aurez alors besoin de créer des profils sur mesure avec des accès restreints et précis.
Comprendre les rôles et les capacités (Capabilities)
Dans l’écosystème WordPress, la gestion des accès repose sur deux concepts fondamentaux :
- Le rôle (Role) : C’est le nom du groupe auquel appartient l’utilisateur (ex: Auteur).
- La capacité (Capability) : C’est la permission d’effectuer une action précise (ex:
publish_postsouedit_users).
Pour gérer les rôles et permissions utilisateurs WordPress efficacement, nous n’attribuons pas de droits directement à un utilisateur, mais nous assignons des capacités à un rôle. L’utilisateur hérite ensuite des capacités de son rôle.
Rôles natifs et capacités principales
| Rôle natif | Capacité principale associée | Accès Back-office |
|---|---|---|
| Administrateur | manage_options | ✅ Total |
| Éditeur | edit_others_posts | ✅ Partiel |
| Auteur | publish_posts | ✅ Restreint |
| Contributeur | edit_posts (sans publication) | ✅ Très restreint |
| Abonné | read | ❌ Profil uniquement |
Créer un rôle utilisateur personnalisé en PHP
Pour ajouter un nouveau rôle, nous utilisons la fonction add_role(). Elle prend trois paramètres : l’identifiant du rôle, son nom affiché, et un tableau de capacités.
<?php
function nc_ajouter_role_personnalise() {
add_role(
'gestionnaire_produit',
'Gestionnaire de Produit',
array(
'read' => true,
'edit_posts' => true,
'delete_posts' => false,
)
);
}
add_action('init', 'nc_ajouter_role_personnalise');
?>Ajouter ou retirer des capacités à un rôle existant
Il est fréquent de vouloir ajuster les droits d’un rôle natif. Par exemple, vous pourriez vouloir autoriser les éditeurs à gérer les menus sans leur donner les droits d’administrateur complets. Pour cela, nous récupérons l’objet du rôle avec get_role(), puis nous utilisons add_cap() ou remove_cap().
<?php
function nc_modifier_permissions_editeur() {
// Récupérer le rôle Éditeur
$role_editeur = get_role('editor');
if ($role_editeur) {
// Ajouter le droit de modifier les thèmes (menus/widgets)
$role_editeur->add_cap('edit_theme_options');
// Retirer le droit de supprimer des pages
$role_editeur->remove_cap('delete_pages');
}
}
add_action('init', 'nc_modifier_permissions_editeur');
?>Attention : Les rôles et les capacités sont sauvegardés dans la base de données de WordPress (table wp_options). Il n’est pas nécessaire d’exécuter ces fonctions à chaque chargement de page. Dans un plugin, privilégiez l’exécution lors du hook d’activation (register_activation_hook).
Vérifier les droits d’un utilisateur
Une fois vos rôles et capacités configurés, vous devez conditionner l’affichage de certains éléments ou l’exécution de scripts dans vos templates. La fonction current_user_can() est conçue pour cela.
<?php
if (current_user_can('edit_theme_options')) {
echo '<a href="/wp-admin/nav-menus.php">Gérer les menus</a>';
} else {
echo '<p>Zone restreinte. Vous n'avez pas les permissions requises.</p>';
}
?>Supprimer un rôle inutile
Si vous souhaitez nettoyer l’interface d’administration et éviter que des utilisateurs ne soient assignés à des rôles que vous n’utilisez pas, vous pouvez utiliser remove_role().
<?php
function nc_supprimer_roles_inutiles() {
remove_role('subscriber');
remove_role('contributor');
}
add_action('init', 'nc_supprimer_roles_inutiles');
?>Conclusion
Maîtriser et gérer les rôles et permissions utilisateurs WordPress via PHP vous permet de sécuriser vos projets et d’offrir une interface d’administration parfaitement adaptée aux besoins de vos clients. En manipulant correctement add_role(), add_cap() et current_user_can(), vous transformez WordPress en un véritable framework de développement d’applications sur mesure, tout en respectant les standards de sécurité.


