web-dev-qa-db-fra.com

Création de rôles d'utilisateur personnalisés

Je dois créer un rôle d'utilisateur personnalisé qui sera capable de créer des publications (d'un type de publication spécifique) mais pas de les publier (tout comme le rôle actuel de contributor .

Je suis un peu confus sur la façon de créer un nouveau rôle ou capacité pour y parvenir. Comment/où dois-je commencer?

Merci

UPDATE: J'ai ajouté ces éléments à la fonction de publication personnalisée, comme suggéré par Eric Holmes.

'capabilities' => array(
    'edit_posts' => 'edit_helps',
    'edit_post' => 'edit_help',
    'read_post' => 'read_helps',
),

Ajout de ceux-ci au hook d'activation du plugin et à l'opposé du hook de désactivation (je modifie le rôle de contributeur lui-même):

function modify_user_capabilities() {
  $role = get_role( 'contributor' );
  $role->remove_cap( 'delete_posts' );
  $role->remove_cap( 'edit_posts' );
  $role->add_cap('edit_helps');
  $role->add_cap('edit_help');
  $role->add_cap('read_helps');
  }

register_activation_hook( __FILE__, 'modify_user_capabilities' );

Maintenant, seul le contributeur peut éditer ce type de message, pas les autres utilisateurs (par exemple, administrateur)

Existe-t-il un meilleur moyen de leur attribuer ces fonctionnalités par lots? J'ai modifié mon crochet d'activation pour:

function modify_user_capabilities() {
  $role = get_role( 'contributor' );
  $role->remove_cap( 'delete_posts' );
  $role->remove_cap( 'edit_posts' );

  foreach (array('administrator', 'editor', 'author', 'contributor') as $user_role) {
    $role = get_role($user_role);
    $role->add_cap('edit_helps');
    $role->add_cap('edit_help');
    $role->add_cap('read_helps');
  }  
}

UPDATE 2: J'ai totalement oublié d'affecter quelqu'un à la suppression des publications. J'ai donc mis à jour la fonction:

function modify_user_capabilities() {

  //remove the contributor from editing any post
  $role = get_role( 'contributor' );
  $role->remove_cap( 'delete_posts' );
  $role->remove_cap( 'edit_posts' );

  foreach (array('administrator', 'editor', 'author', 'contributor') as $user_role) {
    $role = get_role($user_role);
    $role->add_cap('edit_helps');
    $role->add_cap('edit_help');
    $role->add_cap('read_helps');
  }
  //let admins delete posts
  $role = get_role('administrator');
  $role->add_cap('delete_helps');
  $role->add_cap('delete_publised_helps');
  $role->add_cap('delete_others_helps');
  $role->add_cap('delete_help');
}

Maintenant, l'administrateur peut supprimer ces publications.

5
RRikesh

Ajouter un rôle est très simple. La création de fonctionnalités personnalisées est un peu plus compliqué. Lorsque vous enregistrez votre type de message personnalisé , vous définissez vos capacités pour celui-ci. Il s'agit essentiellement d'un tableau de "que voulez-vous compter comme ceci?". Mon exemple ci-dessous clarifiera cette affirmation.

$caps = array(
    'edit_post' => 'edit_cpt_name',
    'edit_posts' => 'edit_cpt_names',
    'manage_posts' => 'manage_cpt_names',
    'publish_posts' => 'publish_cpt_names',
    'edit_others_posts' => 'edit_others_cpt_names',
    'delete_posts' => 'delete_cpt_names'
);

Donc, vous devriez évidemment remplacer "cpt_name" par le slug de votre type de message personnalisé (ou tout ce que vous voulez vraiment). Les éléments à gauche sont les noms de capacités par défaut (il y en a plus, référez-vous à l'entrée register_post_type dans le codex). Quelles que soient les fonctionnalités que vous déclarez dans votre enregistrement de type de publication personnalisé, vous devez également attribuer au rôle d'utilisateur ces fonctionnalités:

add_role('basic_contributor', 'Basic Contributor', array(
    'read' => true,
    'edit_posts' => false,
    'edit_cpt_name' => true, // True allows that capability
    'edit_cpt_names' => true,
    'publish_cpt_names' => true,
    'edit_others_cpt_names' => false, // Use false to explicitly deny
    'delete_cpt_names' => false
));
2
Eric Holmes