Ceci est plus un pense-bête qu’un vrai tuto. Je retrace ici rapidement comment créer un nouveau rôle dans WordPress. Ce rôle ne pourra gérer qu’un seul custom post type dans l’admin.
Lors de la creation du CPT
Quand vous déclarez les arguments de votre CPT ( dans mon exemple le CPT se nomme ‘materiel’ ) , vous devrez prendre soins d’ajouter les deux arguments suivant en plus des autres:
// default values //'capability_type' => 'post', //Default: "post" //'capabilities' => true, //By default, 7 keys are accepted as part of the capabilities array: publish_posts... $args = array( 'capability_type' => 'materiel', 'capabilities' => array( 'publish_posts' => 'publish_materiels', 'edit_posts' => 'edit_materiels', 'edit_others_posts' => 'edit_others_materiels', 'delete_posts' => 'delete_materiels', 'delete_others_posts' => 'delete_others_materiels', 'read_private_posts' => 'read_private_materiels', 'edit_post' => 'edit_materiel', 'delete_post' => 'delete_materiel', 'read_post' => 'read_materiel', ), );
Les capacités sont là mais personne ne les utilise encore. Il faut donc créer le nouveau rôle et donner les droits.
Création du rôle & droits
Les rôles sont inscris en base de données. Il faut donc exécuter le code qu’une seul fois. La création du rôle se fait avec la fonction add_role
add_role( string $role, string $display_name, bool[] $capabilities = array() )
$role : le slug / nom du rôle
$display_name : le nom à afficher dans l’administration
$capabilities : le tableau des capacités à fournir
Nous allons donc utiliser le hook ‘init’ et voir sir le rôle existe déjà.
Si non, alors on va exécuter le code.
add_action('init', 'add_role_magasinier'); function add_role_magasinier(){ if ( get_role( 'magasinier' ) ){ // sert à supprimer le rôle, utile pendant le dev... // remove_role( 'magasinier' ); return; } // ici je passe toutes les capacités à false, pour que notre nouveau rôle ne puisse rien faire $editor_capabilities = array( 'moderate_comments' => false, 'manage_categories' => false, 'manage_links' => false, 'upload_files' => false, 'unfiltered_html' => false, 'edit_posts' => false, 'edit_others_posts' => false, 'edit_published_posts' => false, 'publish_posts' => false, 'edit_pages' => false, 'edit_others_pages' => false, 'edit_published_pages' => false, 'publish_pages' => false, 'delete_pages' => false, 'delete_others_pages' => false, 'delete_published_pages' => false, 'delete_posts' => false, 'delete_others_posts' => false, 'delete_published_posts' => false, 'delete_private_posts' => false, 'edit_private_posts' => false, 'read_private_posts' => false, 'delete_private_pages' => false, 'edit_private_pages' => false, 'read_private_pages' => false, 'editor' => false, 'edit_users' => false, 'delete_users' => false, 'create_users' => false, 'list_users' => false, 'remove_users' => false, 'promote_users' => false, ); // puis je lui donne les nouvelle capacité que j'ai déclarer dans mon CPT // j'ajoute 'read' => true, pour qu'il puisse accéder à l'admin ! $additionnal_capabilities = array( 'read' => true, 'magasinier' => true, 'publish_materiels' => true, 'edit_materiels' => true, 'edit_others_materiels' => true, 'delete_materiels' => true, 'delete_others_materiels' => true, 'read_private_materiels' => true, 'edit_materiel' => true, 'delete_materiel' => true, 'read_materiel' => true, ); add_role( 'magasinier', 'Magasinier', array_merge( $editor_capabilities, $additionnal_capabilities ) ); //Enfin on oublie pas de donner aussi les droits à l'admin !! $admins = get_role('administrator'); $admins->add_cap('publish_materiels'); $admins->add_cap('edit_materiels'); $admins->add_cap('edit_others_materiels'); $admins->add_cap('delete_materiels'); $admins->add_cap('delete_others_materiels'); $admins->add_cap('read_private_materiels'); $admins->add_cap('edit_materiel'); $admins->add_cap('delete_materiel'); $admins->add_cap('read_materiel'); }
Voilà, maintenant lors de la création de nouveaux utilisateurs, vous pouvez leur donner le rôle de magasinier et ils n’auront accès qu’a un seul CPT.