J'essaie de ne montrer qu'une taxonomie pour les editor
et administrator
mais je n'ai pas trouvé de solution sur SO ou ici. La chose la plus proche que j'ai pu trouver était Comment supprimer une taxonomie de Wordpress? sur SO. Quelle est la bonne façon de n'autoriser la taxonomie que pour editor
et administrator
?
// remove from everyone that isn't admin or editor
function taxonomy_for_admin_and_editor_only() {
if ( !current_user_can( 'administrator' ) || !current_user_can( 'editor' ) ) {
register_taxonomy( 'foobar', array() );
}
}
add_action( 'init' , 'taxonomy_for_admin_and_editor_only' );
J'ai essayé add_action( 'admin' , 'taxonomy_for_admin_and_editor_only' );
sans succès non plus.
Lorsque vous enregistrez votre taxonomie, vous pouvez passer un argument appelé capacités . Tout simplement des capacités que seuls les administrateurs et les éditeurs possèdent.
$args = array(
'capabilities' => array( 'manage_options', 'edit_posts' )
);
register_taxonomy( 'foobar', 'post', $args );
Je n'avais jamais joué avec des rôles auparavant, donc c'était une expérience d'apprentissage amusante. Je pars parce que j'ai passé beaucoup de temps à rechercher ce domaine et que cela pourrait aider la prochaine personne. Je sais que ma question concerne la taxonomie, mais la question me confondait et je voulais donc tester au niveau du CPT. Le hook correct était admin_init
mais il supprimait toujours la taxonomie des administrator
et editor
et je ne le voulais pas.
Avant la réponse, j'ai rencontré " Possible de masquer l'interface utilisateur/le type de publication personnalisée à partir de rôles d'utilisateur spécifiques? "
// hide from Contributors
function no_see_from_contributors() {
if ( current_user_can( 'contributor' ) ) :
remove_menu_page( 'edit.php' ); // Posts
remove_menu_page( 'tools.php' ); // Tools
remove_menu_page( 'edit-comments.php' ); // Comments
endif;
}
add_action( 'admin_menu', 'no_see_from_contributors' );
créer un compte contributeur test, même s'il n'est pas visible dans le menu, un contributeur peut toujours accéder à cette zone en ajoutant edit.php
, tools.php
ou edit-comments.php
dans l'URL. Je vais tester une solution pour éviter cela et faire une modification avec une solution si j'en trouve une.
Des recherches ultérieures ont ensuite abouti à " Restreindre le type de message personnalisé au seul rôle d'administrateur de site " et " Supprimer le menu Type de message personnalisé pour les utilisateurs non administrateurs ", qui étaient d'excellentes lectures. Pour en savoir plus sur les fonctionnalités, visitez le site Codex: enregistrez le type de message et faites défiler jusqu’à capability_type
.
Vous pouvez référencer le codex pour Administrator et Editor sur les rôles à utiliser dans le tableau.
Taxonomie finale:
function something_taxonomy() {
$labels = array(
'name' => _x( 'Taxonomies', 'Taxonomy General Name', 'theme' ),
'singular_name' => _x( 'Taxonomy', 'Taxonomy Singular Name', 'theme' ),
'menu_name' => __( 'Taxonomy', 'theme' ),
'all_items' => __( 'All Items', 'theme' ),
'parent_item' => __( 'Parent Item', 'theme' ),
'parent_item_colon' => __( 'Parent Item:', 'theme' ),
'new_item_name' => __( 'New Item Name', 'theme' ),
'add_new_item' => __( 'Add New Item', 'theme' ),
'edit_item' => __( 'Edit Item', 'theme' ),
'update_item' => __( 'Update Item', 'theme' ),
'view_item' => __( 'View Item', 'theme' ),
'separate_items_with_commas' => __( 'Separate items with commas', 'theme' ),
'add_or_remove_items' => __( 'Add or remove items', 'theme' ),
'choose_from_most_used' => __( 'Choose from the most used', 'theme' ),
'popular_items' => __( 'Popular Items', 'theme' ),
'search_items' => __( 'Search Items', 'theme' ),
'not_found' => __( 'Not Found', 'theme' ),
'items_list' => __( 'Items list', 'theme' ),
'items_list_navigation' => __( 'Items list navigation', 'theme' ),
);
$capabilities = array(
'edit_post' => 'edit_pages',
'read_post' => 'edit_pages',
'delete_post' => 'edit_pages',
'edit_posts' => 'edit_pages',
'edit_others_posts' => 'edit_pages',
'delete_posts' => 'edit_pages',
'publish_posts' => 'edit_pages',
'read_private_posts' => 'edit_pages'
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'capabilities' => $capabilities,
);
register_taxonomy( 'taxonomy_key', array( 'post', 'foo_key', 'bar_key' ), $args );
}
add_action( 'init', 'something_taxonomy', 0 );
Ce que j'ai utilisé pour supprimer la méta-boîte des contributeurs:
if ( is_admin() ) {
function remove_metabox_for_non_admin_and_editor() {
if ( current_user_can( 'contributor' ) || current_user_can( 'subscriber' ) ) {
remove_meta_box( 'tagsdiv-foo_key_tag', 'foo_key', 'normal' );
remove_meta_box( 'categorydiv', 'foo_key', 'normal' );
remove_meta_box( 'foo_keyimagediv', 'foo_key', 'normal' );
remove_meta_box( 'authordiv', 'foo_key', 'normal' );
remove_meta_box( 'trackbacksdiv', 'foo_key', 'normal' );
remove_meta_box( 'commentstatusdiv', 'foo_key', 'normal' );
remove_meta_box( 'foo_keycustom', 'foo_key', 'normal' );
remove_meta_box( 'commentstatusdiv', 'foo_key', 'normal' );
remove_meta_box( 'commentsdiv', 'foo_key', 'normal' );
remove_meta_box( 'revisionsdiv', 'foo_key', 'normal' );
remove_meta_box( 'authordiv', 'foo_key', 'normal' );
remove_meta_box( 'slugdiv', 'foo_key', 'normal' );
remove_meta_box( 'taxonomy_keydiv', 'foo_key', 'normal' );
// remove pages
remove_menu_page( 'edit-comments.php' );
remove_menu_page( 'edit.php' );
remove_menu_page( 'tools.php' );
}
}
add_action( 'admin_menu', 'remove_metabox_for_non_admin_and_editor' );
}
Pour trouver ce que le $id
correspond à la méta-boîte personnalisée, j'ai utilisé l'élément inspecter de Chrome pour trouver l'identifiant qu'il était en train de créer. J'ai choisi admin_menu
au lieu de admin_init
après avoir lu " Quel crochet Wordpress déclenche en premier admin_init ou admin_menu "
Vous voulez utiliser le hook admin_init
:
add_action( 'admin_init' , 'taxonomy_for_admin_and_editor_only' );