htmlcss.fr Des tutos ou tutoriels Wordpress, html, php ou javascript.

Création de Rôle

C

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.

htmlcss.fr Des tutos ou tutoriels Wordpress, html, php ou javascript.

François Riant

Je m’appelle François Riant. Je travail dans les métiers du web depuis 2006. Mon expérience m’a amené à changer plusieurs fois de technologie.

Aujourd’hui je cherche à partager mon expérience et j’y trouve du de plaisir. Je travail actuellement chez W2P Digital.
Je ne prends donc pas de mission en freelance.

Si vous avez une remarque ou une question; vous pouvez me joindre sur francois.riant@gmail.com