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 shark59.
Merci beaucoup pour ce tutoriel très clair, très simple et qui m’a été très utile !
Voici le lien avec les différents droits possibles, ça sera utile pour ce qui les recherches : http://codex.wordpress.org/Roles_and_Capabilities
Super tuto !
Commentaire de Greg.
Salut shark59.
Heureux de voir que cet article est utile à certains. Merci pour le lien, c’est effectivement celui que j’ai mis au début de ce billet ;)
Bon courage pour ton nouveau site o/
Commentaire de ltndr.
Salut Greg,
J’ai appliqué ta méthode sur wordpress 3. L’admin me retourne une erreur que je n’arrive pas à résoudre.
Est ce qu’on pourrait en discuter par mail ?
Evidemment ça urge, le site est down…
Commentaire de Gilles.
Salut.
Ce site m’a l’air excellent. Bravo à toi.
Et très beau.
Je développeur web freelance et je me suis mis sérieusement à WP depuis une dizaine de mois, parce qu’on n’arrêtait pas de m’en demander, et des avis et conseils comme les tiens sont très précieux pour moi.
Je vais prochainement aussi monter un blog pour partager mes expériences de développeur wp.
Ton article sur la personnalisation de l’admin de wp est une merveille.
a+
Commentaire de Greg.
Salut Gilles.
Merci pour ton soutien :)
Commentaire de Benoit.
Merci beaucoup, super article. J’ai cherche depuis un moment comment faire en sorte qu’un utilisateur qui ne soit pas admin puisse utiliser un plugin en particulier qui semble ne pouvoir être utilisé qu’en tant qu’administrateur. Je pense que je vais créer un nouveau rôle identique à l’admin et le brider grâce à l’excellent plugin Adminimize… parce que bien entendu, si je bride directement le rôle admin, je ne peux plus rien faire :)
Au passage, j’aime beaucoup le design du site. Je n’ai pas encore visité les autres pages, mais j’ai l’impression que c’est plutôt sympa et utile comme contenu :) Merci de partager !
Commentaire de Benoit.
Fonction testée et approuvée !! :) Merci beaucoup, le résultat est exactement comme je le souhaitais.
Pour ltndr, je ne sais pas quelle est l’erreur, mais pour info, il existe un fichier functions.php dans le dossier wp-includes, mais ce n’est pas ici qu’il faut ajouter la fonction, c’est dans le fichiers functions.php du dossier de ton thème WordPress. C’est bien précisé dans le billet, mais par inattention j’ai fait l’erreur donc…
Commentaire de sustanon.
Bonjour, Je pense que j’ai vu que vous avez visité mon site alors je suis venu à « renvoyer l’ascenseur » . Je tente de trouver des choses à améliorer mon site web ! Je suppose que c’est ok d’utiliser quelques-unes de vos idées !