web-dev-qa-db-fra.com

Taxonomies personnalisées

J'ai enregistré plusieurs taxonomies personnalisées pour un type de publication personnalisé. Le code pour l'un d'eux est le suivant:

$labels = array(
    'name'              => __( 'Genre', 'textdomain' ),
    'singular_name'     => __( 'Genre', 'textdomain' ),
    'search_items'      => __( 'Search Genres', 'textdomain' ),
    'all_items'         => __( 'All Genres', 'textdomain' ),
    'parent_item'       => __( 'Parent Genre', 'textdomain' ),
    'parent_item_colon' => __( 'Perent Genre:', 'textdomain' ),
    'edit_item'         => __( 'Edit Genre', 'textdomain' ), 
    'update_item'       => __( 'Update Genre', 'textdomain' ),
    'add_new_item'      => __( 'Add New Genre', 'textdomain' ),
    'new_item_name'     => __( 'New Genre', 'textdomain' ),
    'menu_name'         => __( 'Genres', 'textdomain' ),
);
$args = array(
    'labels'            => $labels,
    'public'            => true,
    'show_admin_column' => true,
    'show_ui'           => true,
    'hierarchical'      => true,
    'capabilities'      => array(
        'manage_terms'  => 'edit_posts',
        'edit_terms'    => 'edit_posts',
        'delete_terms'  => 'edit_posts',
        'assign_terms'  => 'edit_posts'
    )
);
register_taxonomy( 'genres', 'book', $args );

J'ai des problèmes de capacités, dans la mesure où je veux qu'une des taxes personnalisées puisse être gérée par les auteurs.

Si je définis les fonctionnalités comme le code ci-dessus, tel que 'manage_terms' => 'edit_posts', les auteurs ne sont pas autorisés à ajouter de nouveaux termes à la taxonomie personnalisée, même s'ils possèdent des fonctionnalités edit_posts.

J'ai également essayé d'ajouter des fonctionnalités personnalisées au rôle auteur et de les attribuer lors de l'enregistrement de la taxonomie personnalisée, mais sans succès.

Qu'est-ce qui fonctionne est d'ajouter 'manage_categories' au rôle de l'auteur, mais cette solution n'est pas satisfaisante dans la mesure où toutes les taxonomies sont ensuite modifiables par les auteurs.

Merci d'avance.

3
vguerrero

Tout comme les capacités du CPT, celles de la taxonomie sont également personnalisables, dans register_taxonomy() :

capacités

  • 'manage_terms' - 'manage_categories'
  • 'edit_terms' - 'manage_categories'
  • 'delete_terms' - 'manage_categories'
  • 'assign_terms' - 'edit_posts'

Comme vos auteurs ont uniquement edit_posts, cela fonctionne comme vous le constatez: ils peuvent attribuer des termes existants, mais pas les créer. Vous pouvez personnaliser les fonctionnalités de la taxonomie en question et attribuer des fonctionnalités respectives aux auteurs afin qu'ils puissent y créer des termes (mais pas dans d'autres taxonomies).

1
Rarst

Lorsque vous définissez des fonctionnalités lors de l’enregistrement d’une taxonomie, vous définissez de nouvelles fonctionnalités équivalentes aux fonctionnalités existantes de manage_termsedit_termsdelete_terms et de assign_terms.

Donc vous devriez faire quelque chose comme ça puisque votre taxonomie est Genre:

'capabilities' => array(
    'manage_terms' => 'manage_genre',
    'edit_terms' => 'edit_genre',
    'delete_terms' => 'delete_genre',
    'assign_terms' => 'assign_genre',
)

Une fois cette opération effectuée, vous pourrez mapper ces fonctionnalités sur un rôle d'utilisateur. La méthode la plus simple et la méthode que je privilégie consiste à utiliser un plug-in tel que Capability Manager Enhanced , bien qu'il existe de nombreux plug-ins qui feront l'affaire.

2
Marc