web-dev-qa-db-fra.com

Confusion lors de l'ajout de méta fonctionnalités à un rôle après l'enregistrement d'un type de publication personnalisé avec le paramètre correspondant 'type_capacité'

J'ai été assez confus avec le paramètre CPT (Custom Post Type) et l'ajout de fonctionnalités générées à un rôle.

J'ai donc un CPT appelé 'external_role' enregistré comme suit:

add_action('init', 'external_roles_post_type_init');
function external_roles_post_type_init() {
  $labels = array(
    'name' => _x('External Roles', 'post type general name'),
    'singular_name' => _x('external role', 'post type singular name'),
    'add_new' => _x('Add New', 'external role'),
    'add_new_item' => __('Add New External Role'),
    'edit_item' => __('Edit External Role'),
    'new_item' => __('New External Role'),
    'view_item' => __('View External Role'),
    'search_items' => __('Search External Roles'),
    'not_found' =>  __('No job found'),
    'not_found_in_trash' => __('No job found in Trash'), 
    'parent_item_colon' => ''
  );
  $args = array(
    'labels' => $labels,
    'public' => true,
    'publicly_queryable' => true,
    'show_ui' => true,
    'has_archive' => 'past-external-roles',
    'rewrite' => array('slug' => 'external-roles','with_front' => false),
    'query_var' => true,
    'capability_type' => array('external_role', 'external_roles'),
    'map_meta_cap' => true,
    'hierarchical' => false,
    'show_in_nav_menus' => false,
    'menu_position' => 20,
    'supports' => array(
      'title',
      'editor',
      'author',
      'custom-fields',
      'revisions'
    )
  );
  register_post_type('external_role',$args);
}

En regardant le paramètre capability_type (si je le comprends bien), les capacités suivantes seront générées:

Méta capacités:

  • edit_external_role
  • read_external_role
  • delete_external_role

Fonctionnalités primitives (générées à partir de méta fonctionnalités):

  • edit_external_role
  • edit_others_external_role
  • publish_external_role
  • read_private_external_role

Ok, je souhaite maintenant que mes capacités soient optimisées par le rôle admin, afin que les administrateurs puissent entièrement gérer un nouveau CPT.

Je pensais que si je ne fais que grand meta capabilities, cela signifierait que tous les primitive capabilities seraient également inclusivement pour le rôle? Est-ce le cas?

Voici ce que j'ai pour ajouter des fonctionnalités au rôle d'administrateur:

// Add caps for Administrator role
$role =& get_role('administrator');
// external roles capabilities
$role->add_cap('edit_external_role');
$role->add_cap('read_external_role');
$role->add_cap('delete_external_role');

Cependant, cela ne fait pas l'affaire.

Quelle est la manière correcte et concise d’ajouter toutes les capacités d’un rôle de gestion d’un CPT?

Merci beaucoup, Dasha

MODIFIER

J'utilise le hook init dans le functions.php pour ajouter des majuscules au rôle admin:

add_action( 'init', 'my_custom_roles_capabilities', 0 );
function my_custom_roles_capabilities(){
    // Add caps for Administrator role
    $role =& get_role('administrator');
    // external roles capabilities
    $role->add_cap('edit_external_role');
    $role->add_cap('read_external_role');
    $role->add_cap('delete_external_role');
}
5
dashaluna

Avez-vous essayé de définir les fonctionnalités de la fonction external_roles_post_type_init ()?

Après le

'capability_type' => array('external_role', 'external_roles'),

essayez d'ajouter ceci

'capabilities' => array(
    'publish_posts' => 'publish_external_roles',
    'edit_posts' => 'edit_external_roles',
    'edit_others_posts' => 'edit_others_external_roles',
    'delete_posts' => 'delete_external_roles',
    'delete_others_posts' => 'delete_others_external_roles',
    'read_private_posts' => 'read_private_external_roles',
    'edit_post' => 'edit_external_role',
    'delete_post' => 'delete_external_role',
    'read_post' => 'read_external_role',
        ),

comme autre argument du tableau $ args

Ensuite, avant d'appliquer la fonctionnalité à tel ou tel rôle, vous pouvez essayer d'installer Plug-in de l'éditeur de rôle utilisateur rechercher si les fonctionnalités sont vraiment existantes. aux rôles. Je sais que ce n'est pas comme coder, mais en réalité, la possibilité de donner et de révoquer d'un clic dans le panneau d'administration est vraiment pratique.

Je vous dis cela, car parfois (très souvent en fait), j'enregistre des types de publication personnalisés avec la même méthode que vous utilisez (plus le tableau de fonctionnalités que j'ai collé ci-dessus), mais pour une raison quelconque, les fonctionnalités ne sont pas réellement créées. Parfois, je résous simplement en déplaçant la fonction d’enregistrement en position haute dans le fichier functions.php. Il me semble que c’est aussi un wichcraft, mais parfois ça marche.

Lorsque je me trouve dans un tel chemin, la seule solution que je puisse trouver consiste à utiliser à la fois Editeur de rôle utilisateur et Map Cap plugins. Je n'aime pas ça, mais c'est mieux que de perdre la tête.

J'espère que cela vous aide, même si cela ne résout pas le problème de "confusion" que je partage avec vous.

2
bluantinoo