Dans WordPress il est parfois utile d’avoir des rôles personnalisés en plus de ceux proposés par défaut. Pour rappel, les rôles sont « Administrateur », « Éditeur », etc.
Aujourd’hui nous allons voir comment créer un nouveau rôle avec des « capabilities » personnalisées.
EDIT 28/01/2014 : vous pouvez oublier cet article et aller voir celui-ci dont le code fonctionne correctement.
Pourquoi créer un rôle spécial?
On pourrait imaginer avoir besoin d’un type d’abonné spécial, et y ajouter une « capability » qui n’existe pas, afin d’utiliser un plugin par exemple. Les « capabilities » sont des droits, pour cela je vous renvoies vers le codex de WordPress (anglais), où on y compare les rôles et leurs droits.
Bref, je ne sais pas vous, mais lorsque je réalise un site pour quelqu’un, je ne me vois pas lui donner les droits Administrateur et risquer que cette personne fasse une gaffe et mette le site en rade (à moins que la personne s’y connaisse, mais c’est rare car elle ne ferait pas appel à moi sinon). Le but n’est pas de donner un minimum de droits à la personne sur son propre site mais au contraire, lui donner un maximum de libertés sans risquer de gros dégâts. C’est pour ça que lorsque je crée un site pour quelqu’un, je crée un rôle « Propriétaire » avec des droits entre « Administrateur » et « Éditeur ».
[warning] Faire ces manipulations sur un site de test, pas sur un site en production! En cas d’erreur le site sera inaccessible!
Assez de blabla
Nous allons d’abord créer une fonction et la hooker à l’initialisation de WordPress.
Ensuite, nous allons copier le rôle Éditeur, créer le nouveau rôle Propriétaire en lui donnant les capabilities de l’Éditeur et lui en rajouter.
Attention, lorsque l’on crée un rôle ou lorsque l’on modifie des capabilities, c’est permanent, cela s’inscrit dans la base de donnée.
Ouvrez le fichier functions.php de votre thème et collez y ceci :
12345678
function modify_capabilities() {
$editor_role = get_role('editor');
add_role('owner', 'Propriétaire', $editor_role->capabilities);
$owner_role = get_role('owner');
$owner_role->add_cap('edit_theme_options');
$owner_role->add_cap('list_users');
}
add_action('init','modify_capabilities');
Avec get_role('editor')
on enregistre le rôle (qui est un objet php) dans une variable.
Ensuite nous utilisons add_role();
pour ajouter un nouveau rôle. En paramètre nous lui fournissons un identifiant unique ‘owner’, un nom d’affichage ‘Propriétaire’ et des droits : les capabilities du rôle Éditeur.
Puis, on lui ajoute d’autres capabilities (voir la page du codex pour la liste complète) : edit_theme_options
pour permettre de rajouter des liens dans les menus (ça donne aussi le droit de changer de thème), list_users
pour permettre de voir la liste de tous les inscrits sur le site.
Nota : pour les opérations inverses, on utilisera remove_cap()
pour enlever des capabilities et remove_role()
pour supprimer un rôle (les modifications ne disparaissent pas si on supprime le code de functions.php).
Ce que je fais également, c’est donner le droit manage_options
afin de pouvoir accéder à certains plugins. Mais c’est risqué car on ouvre tout un panel de possibilités à ce ‘Propriétaire’, donc l’étape suivante sera de personnaliser l’interface de l’administration en supprimant quelques liens du sous-menu « Réglages ». En fait, supprimer des liens dans le menu n’empêche pas la personne d’accéder aux dites pages (puisqu’elle a le droit), mais si la personne est assez maline pour y accéder, alors elle est assez maline pour ne pas mettre le bazar dans les réglages du site. Et à ce niveau là, autant lui donner un rôle Administrateur ;)
Mais tout ceci fera l’objet d’un autre tutoriel :)
EDIT 02/05/2011 : l’article Personnaliser son administration est enfin disponible. Parmi d’autres choses, on y trouve comment modifier le menu de l’administration.
Commentaires
Commentaire de cchaudey.
Génial merci ! :)
Commentaire de pinpindesmontagnes.
Bonjour,
Je ne trouve nul part « la capability » permettant de piloter les galleries (presénte dans mon thème, je ne sais si c’est le cas dans le thème de base).
La liste des capabilities/roles du sie référence WordPress ne le mentionne nullep art.
Vous pourriez m’aider ?
merci
Commentaire de Grégory Viguier.
Salut.
Il n’y a pas de capa pour « piloter les galeries » de base, elle a dû être ajoutée par ton thème.
Je serais toi, je ferais quelque chose comme ça :
1234
Cela va imprimer sur le site le rôle administrateur, donc tu pourras voir ses capas et peut-être trouver celle qu’il te faut (attention ce sera visible par tout le monde). Sinon tu peux aussi installer un plugin comme « members », qui te permet de modifier les capas de chaque rôle, tu pourras donc repérer celle qui t’intéresse dedans.
Au passage, j’ai fait un nouvel article sur la création d’un rôle.
A+
Commentaire de pinpindesmontagnes.
Bonjour,
OK Merci !
pour afficher les rôles admin c’est pratique.
J’ai déjà Members et justement je ne trouve pas cette capa.
J’avais déjà ajouter celle relative aux portfolios (élément ajouté sur mon thème) en fouinant bien sur le net mais les galleries aucune traces.
Par défaut la capa utilisée doit être la même que les pages ou les articles.
Sais tu si une capa existe forcément ? je veux dire dans quel fichier le l’appel à la capa est il ? Car si j’ai ça je pourrais me débrouiller…
Merci
Commentaire de Grégory Viguier.
Là je ne peux pas t’aider, il faut fouiller dans le thème pour voir comment le dev a fait son histoire.
Commentaire de pinpindesmontagnes.
OK merci de ta réponse et de ta réactivité et bravo pour le site !
Commentaire de Kregg.
Ce code ne marche pas avec WP 3.8.0 : plantage de l’admin rendu inaccessible pour tout membre, quel que soit le rôle. Donc ré-import de base de donnée sauvegardée pour tout rétablir. Gros stress car c’est de la roulette russe. Je vais m’orienter vers un plugin. Kregg.
Commentaire de camikat.
C clair k ça ne marche pas du tout même sur un site test, à déconseiller aux non initiés !
Commentaire de Grégory Viguier.
Je vous conseille un article plus récent et qui fonctionne sans soucis.