La taxonomie par défaut, catégorie. Par défaut, seuls les utilisateurs dotés de la fonctionnalité edit_posts
peuvent attribuer des catégories lors de la création/modification ultérieure.
J'ai un rôle avec des capacités très limitées. Je souhaite permettre aux utilisateurs ayant ce rôle de pouvoir attribuer des catégories lors de la création/de la modification de type de message personnalisé, mais je ne peux pas leur donner la capacité edit_posts
et ils ne devraient pas pouvoir modifier la taxonomie, mais seulement l'attribuer.
Comment puis-je faire ceci? Définir 'assign_terms' => 'read'
est une option, mais comment puis-je définir cette valeur sans avoir à ré-enregistrer la taxonomie?
Ou bien, comment puis-je autoriser mon rôle de bas niveau à attribuer la taxonomie?
Cela devrait fonctionner
add_action( 'init', 'register_category_again', 1 );
function register_category_again() {
$user = wp_get_current_user();
if ( $user->roles[0] != 'your_custom_role' ) return;
global $wp_taxonomies;
unset( $wp_taxonomies['category'] );
global $wp_rewrite;
$rewrite = array(
'hierarchical' => true,
'slug' => get_option('category_base') ? get_option('category_base') : 'category',
'with_front' => ! get_option('category_base') || $wp_rewrite->using_index_permalinks(),
'ep_mask' => EP_CATEGORIES,
);
register_taxonomy( 'category', 'post', array(
'hierarchical' => true,
'query_var' => 'category_name',
'rewrite' => $rewrite,
'public' => true,
'capabilities' => array(
'manage_terms'=> 'manage_categories',
'edit_terms'=> 'manage_categories',
'delete_terms'=> 'manage_categories',
'assign_terms' => 'read'
),
'show_ui' => true,
'show_admin_column' => true,
'_builtin' => true,
) );
}
Je viens de trouver cette question et bien que cela puisse fonctionner, je n'étais pas satisfait de la solution. Il devait y avoir un meilleur moyen de le faire, sans enregistrer à nouveau la taxonomie. Et il existe une meilleure solution que j'utilise maintenant dans mon plugin CPT.
public function wpse_108219_set_taxonomy_caps( $taxonomy, $object_type, $args ) {
global $wp_taxonomies;
if ( 'category' == $taxonomy && 'cpt_item' == $object_type ) {
$wp_taxonomies[ $taxonomy ]->cap->assign_terms = 'edit_cpt_items';
}
}
add_filter( 'registered_taxonomy', 'wpse_108219_set_taxonomy_caps' ), 10, 3 );
Dans cet exemple, j'ai défini la fonctionnalité assign_terms
pour le type d'article personnalisé cpt_item
sur la fonctionnalité personnalisée edit_cpt_items
, qui permet à tout utilisateur doté de cette fonctionnalité d'attribuer des catégories au CPT.
J'espère que cette solution plus propre fonctionne également pour vous.
Vous pouvez également filtrer les arguments de la catégorie de base avant l'enregistrement de la taxonomie:
<?php
/*
* Set the capabilities for the category taxonomy before it's registered.
*
* @param array $args Array of arguments for registering a taxonomy.
* @param array $object_type Array of names of object types for the taxonomy.
* @param string $taxonomy Taxonomy key.
*/
function wpse_108219_register_taxonomy_args( $args, $taxonomy, $object_type ) {
if ( 'category' === $taxonomy ) {
$args['capabilities'] = array(
'manage_terms' => 'manage_categories',
'edit_terms' => 'manage_categories',
'delete_terms' => 'manage_categories',
'assign_terms' => 'read',
);
}
return $args;
}
add_filter( 'register_taxonomy_args', 'wpse_108219_register_taxonomy_args', 10, 3 );