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 Emmanuelle.
Bonjour,
J’ai lu cet article sur la création de rôle car je travailles actuellement sur le wordpress de mon entreprise. C’est un site de photographe et de vente de photos. Certaines photos ont été prise dans des entreprises clientes, nous souhaiterions mettre en place une galerie personnalisée pour chaque client, de façon à ce que quand celui ci se connecte via un identifiant/mot de passe, il soit seul à pouvoir voir et acheter les photos réalisée dans son entreprise. Comment pouvons-nous faire cela ? Les rôles sont-ils utiles dans ce cas ?
Commentaire de Greg.
Bonjour Emmanuelle.
Je ne pense pas que la manipulation des rôle soit à envisager dans ce cas, à priori ce n’est pas l’outil le mieux adapté dans cette situation.
– Ma première idée a été les user metas, c’est à dire les données attachées à un utilisateur enregistré, comme son email, l’url de son site, son nom etc, bref, tout ce que l’on peut voir sur la page profil. On peut imaginer sur sa page d’édition de profil une zone où l’administrateur pourrait rentrer les url des photos, et une page front-end qui afficherait les photos en question. L’avantage c’est qu’une même page peut alors afficher des photos différentes, celles de l’utilisateur, mais ça demande un peu de développement (rien de bien compliqué cependant).
– Une seconde solution, plus simple, serait d’utiliser les mots de passe des posts. WordPress permet de créer des posts protégés par mots de passe. Il faut alors créer une page ou un article par client, lui ajouter un mot de passe (dans la boite « publier » de la page -> visibilité -> protéger par mot de passe) et créer une galerie. Cette idée semble plus flexible que la précédente (de plus les photos sont « rangées » par articles, donc plus facilement gérables), et en plus le client peut transmettre le mot de passe à des collègues/amis pour consultation, sans avoir à transmettre ses identifiants client.
A bientôt.
Commentaire de Julien.
Bonjour,
Utilisant l’extension woo commerce pour faire de mon site un site marchand, j’ai quelques soucis quant à la création des produits. Quand je crée ma fiche produit, avec les informations essentielles, une image, les dimensions, le prix, etc… et que je souhaite visualiser ma page, elle apparaît complètement tronquée. Elle est collée sur le bord droit du site et est illisible on ne voit qu’une toute petite partie des informations. De plus certaines informations sont désordonnées et apparaissent n’importe comment. Je ne sais pas du tout comment résoudre ce problème, que puis-je faire ?
Commentaire de Greg.
Bonjour Julien.
Malheureusement je ne connais pas wooCommerce, mais je dois l’utiliser dans quelques jours pour un client. Donc je serais un peu plus familiarisé avec cette extension à la fin du mois.
Cependant, à mon avis ça peut venir de 2 choses :
– une erreur php dans le code de la page,
– un thème pas vraiment adapté à wooCommerce et les sections s’imbriquent mal.
Je mise plutôt pour la 2ème. Pour résoudre ce soucis il faut connaitre un peu WordPress et mettre les doigts dans le code.
A bientôt.
Commentaire de Emmanuelle.
D’accord, effectivement j’ai réalisé mes galeries protégées avec les mot de passe. Une excellente idée que je n’avais pas vue, merci!
Commentaire de ca33.
bonjour,
je viens d’essayer ton code et le site est down, je ne peux plus me connecter…je n’ai plus rien
fatal error \wp-includes\capabilities.php on line 112
Merci de me dire comment remettre le site…je n’ai plus rien et c’est très urgent !!!!!!!!
Commentaire de Greg.
Bonjour.
Il vous faut accéder à votre site avec un logiciel ftp et supprimer ce que vous avez ajouté. Ce doit être une erreur de copier/coller, un point virgule manquant ou je ne sais quoi.
Commentaire de ca33.
non j’avais malheureusement essayé de supprimer…j’ai finalement dû réinitialiser les rôles dans la base de données…
Merci quand même mais je pense que vous devriez mettre en WARNING de faire une sauvegarde de la BDD avant de conseiller de faire sur un site test !!!!!
Commentaire de Hotfirenet.
Bonjour j’ai eu le même soucis j’ai juste modifié wp_user_roles dans la table prefix_options il a planté au niveau du é de Propriétaire. Pensez a faire une sauvegarde de la base avant de faire ce genre de manip et sur un environnement de dev.
Par contre Greg est ce que tu pense que l’on peut modifier les selectbox « rôle » dans les parties wp-admin/user-new.php et wp-admin/user-edit.php?user_id= pour laisser la gestion des utilisateurs au proprio mais ne pas lui laissé la possibilité de s’attribuer le rôle admin ?
Une piste peut être ?
Commentaire de Julio Potier @ BoiteAWeb.
Il ne me semble pas qu’on puisse s’auto upgrader le role.
Et il n’y a pas de hook pour supprimer cette selectbox. Tu epux, en JS la supprimer ( $.remove() ) puis côté PHP empecher la modification de ce role en faisant un unset() dans le $_POST.
#tech #dev
Commentaire de Hotfirenet.
@julio je te confirme si tu as un autre role que administrator tu ne peux pas t’upgrader, par contre je laisse la possibilité de creer éditer et supprimer il a donc la possibilité de lui mettre le rôle admin, effectivement la bidouille serait d’utiliser le remove de jQuery, et unset de PHP.
Merci pour la piste Julio
Commentaire de Hotfirenet.
je m’auto répond et je pense que ça pourra servir a d’autre, trouvé sur http://wordpress.stackexchange.com/questions/40897/how-to-remove-administrator-role-in-settings-general-new-user-default-role
petite modif et voici le code :
123456789
il y avait bien un unset @julio :)
Commentaire de Julio Potier @ BoiteAWeb.
Excellent ! Merci !
Commentaire de Julio Potier @ BoiteAWeb.
http://wordpress.org/extend/plugins/remove-administrators/ ;)
Commentaire de Elodie.
Arrivant 1 an après ce post, je crains de passer direct dans les oubliettes, mais je tente !
Voilà, je souhaite juste donner àmon client l’accès à un plugin TN3 gallery.
J’ai DL l’appli Capability Manager, mais ça ne change rien, et c’est indispensable que je trouve la solution.
Si qq1 peut m’aider…
Commentaire de Greg.
Salut Élodie.
Ma réponse ne dépend pas de l’âge du post (ou du capitaine) mais du temps disponible plutôt :)
Je ne connais pas le plugin donc je n’ai pas de réponse précise à te donner. Ce qu’il faudrait c’est jeter un oeil à l’intérieur du plugin pour voir comment il est fait, quels droits sont utilisés pour voir ces pages. A la vue des captures disponibles sur le site je dirais qu’il utilise un Custom Post Type, donc les droits de « lecture/édition » doivent être proches des droits d’un article ou d’une page je pense.
Hypothèse supplémentaire, l’auteur a peut-être ajouté des droits spéciaux en plus. Capability Manager peut le voir ça.
Au pire, les droits d’accès sont « manage_options », donc au niveau administrateur, mais ça m’étonnerait.
Le compte de ton client a quel rôle ? (je suppose que ce n’est pas administrateur).
Commentaire de Elodie.
En fait, l’outil est pas mal.
Moi, je suis admin, lui éditeur. Donc je veux qu’il ait toute la gestion de ses galeries photos, slideshows créés avec TN3 Gallery, qui est donc un plug-in, l’outil newsletters, etc.
Donc en local, j’ai bidouillé, testé chaque option et voir ce que ça donnait. Au départ, le profil de base de l’éditeur ne lui accorde par l’accès aux pluggins, j’ai fini par trouver. Plus comment lui donner accès à son compte de contact par exemple ou la gestion de ses menus.
Donc en conclusion, un outil que je conseille pour ceux qui comme moi on du mal avec le code ;)
Et c’est bien dans la gestion des options que ça se gère.
Merci pour ta réponse non-assujettie à des dates de validité !