Contenu principal
WordPress - role owner

Créer un nouveau rôle dans WordPress

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.