Est-il possible de masquer l'interface utilisateur / menu de type de publication personnalisé dans des rôles d'utilisateur spécifiques?

20

Ce que je cherche à faire, c'est de masquer complètement l'interface utilisateur pour un type de publication personnalisé à des rôles d'utilisateur spécifiques ... J'ai déjà trouvé de nombreuses ressources sur la façon de désactiver l'accès à l'utilisation de ces CPT, mais rien qui vous permet vraiment de masquer complètement l'interface utilisateur CPT tous ensemble en fonction de l'utilisateur connecté au tableau de bord.

Ceci est important car j'ai besoin que les clients restent complètement en dehors des types de publication personnalisés pour le magasin, et s'ils peuvent voir l'interface utilisateur CPT du magasin dans le tableau de bord, cela ne fait pas de différence si leurs capacités sont limitées car ils vont toujours se renseigner comment ils peuvent ajouter eux-mêmes des produits en conséquence.

Je préfère vraiment ne pas accomplir cela avec un plugin, mais s'il y a quelque chose qui peut faire l'affaire de manière non gonflée, ce serait toujours génial, je suppose.

Merci pour votre aide, SB

M. Brown
la source

Réponses:

39

Pour masquer un élément de menu de type de publication aux utilisateurs non administrateurs:

function wpse28782_remove_menu_items() {
    if( !current_user_can( 'administrator' ) ):
        remove_menu_page( 'edit.php?post_type=your_post_type' );
    endif;
}
add_action( 'admin_menu', 'wpse28782_remove_menu_items' );

your_post_type devrait être le nom de votre type de message réel.

ÉDITER-

d'autres pages de menu que vous pouvez supprimer:

remove_menu_page('edit.php'); // Posts
remove_menu_page('upload.php'); // Media
remove_menu_page('link-manager.php'); // Links
remove_menu_page('edit-comments.php'); // Comments
remove_menu_page('edit.php?post_type=page'); // Pages
remove_menu_page('plugins.php'); // Plugins
remove_menu_page('themes.php'); // Appearance
remove_menu_page('users.php'); // Users
remove_menu_page('tools.php'); // Tools
remove_menu_page('options-general.php'); // Settings

EDIT 2 -

Suppression des éléments du menu du plugin.

Pour les plugins, il semble que vous n'ayez besoin que de la page=requête var. L'autre chose à noter est la priorité, qui est le troisième argument de la admin_menu add_action. Il doit être suffisamment bas (plus le nombre est élevé, plus la priorité est basse) pour que les plugins se soient déjà ajoutés au menu.

function wpse28782_remove_plugin_admin_menu() {
    if( !current_user_can( 'administrator' ) ):
        remove_menu_page('cart66_admin');
    endif;
}
add_action( 'admin_menu', 'wpse28782_remove_plugin_admin_menu', 9999 );
Milo
la source
Une solution si simple, merci, cela a parfaitement fonctionné!
Mr.Brown
Curieux, est-ce wpse28782_remove_menu_itemsun nom de fonction que vous avez choisi au hasard ou est-ce spécifique à WP? .... Aussi, comment pourrais-je m'étendre sur cette idée et cibler des CPT supplémentaires, ou d'ailleurs d'autres menus WP natifs? Merci encore pour votre aide!
Mr.Brown
1
@ Mr.Brown - le nom de la fonction est basé sur l'id de votre question (vérifiez l'url), juste quelque chose garanti d'être unique, vous pouvez le nommer comme vous le souhaitez tant qu'il ne s'agit pas d'une fonction existante. vous pouvez également ajouter des remove_menu_pageappels supplémentaires pour supprimer d'autres CPT, ainsi que d'autres éléments de menu, voir ma modification.
Milo
Tellement génial, merci encore. Ceci est une solution incroyable.
Mr.Brown
Juste une dernière chose - comment puis-je trouver le nom du modèle utilisé pour les menus supplémentaires des plugins actuellement installés? c'est à dire. remove_menu_page('cart_plugin');
Mr.Brown
2

La réponse acceptée peut être utilisée pour masquer les types de publication personnalisés (et d'autres éléments assortis) comme décrit. Mais si vous souhaitez masquer le menu du plug-in CPT UI lui-même, vous pouvez également supprimer l'action qui l'ajoute au menu en premier lieu.

if( !current_user_can( 'administrator' ) ) {
    remove_action( 'admin_menu', 'cptui_plugin_menu' );
}
Subvention
la source
1

Vous pouvez également utiliser le plugin Adminimize . Ce plugin a des options pour tous les types de publications, les métadonnées et bien d'autres à masquer sur différents rôles. Pas de codage.

bueltge
la source
0

Si vous souhaitez masquer le menu de ce plugin dont le nom est "Custom Post Type UI" aka CPTUI, il n'est pas possible de combiner le premier lien avec remove_menu_page.

Tout ce que tu dois faire est ;

function wpse_28782_remove_menus() {
    remove_menu_page('cptui_main_menu');
}
add_action('admin_init', 'wpse_28782_remove_menus');
merkdev
la source
0

Pour masquer les sous-menus Woocommerce sous le menu de haut niveau "Produits" pour tous les rôles d'utilisateur de Shop Manager (Wordpress 5.1.1):

function remove_menus_shopmgr(){

// If the current user is a shop manager
if ( current_user_can('shop_manager') ) {

   //removes Products > Categories submenu 
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_cat&post_type=product' );

   //removes Products > Tags submenu
    remove_submenu_page( 'edit.php?post_type=product','edit-tags.php?taxonomy=product_tag&post_type=product' ); 

    }
}

add_action( 'admin_menu', 'remove_menus_shopmgr', 999 );
Linda Sturling Graphic Design
la source
0

Si remove_menu_pagecela ne fonctionne pas pour vous (ce n'était pas le cas pour moi), au lieu de supprimer le menu, une alternative consiste à dire à WordPress de ne pas afficher le menu pour le type de message:

function wpse28782_hide_menu_items() {
    if( !current_user_can( 'administrator' ) ) {
        $post_type = get_post_type_object( 'your_post_type');
        if ($post_type) {
            $post_type->show_in_menu = false;
        }
    }
}
add_action( 'admin_menu', 'wpse28782_hide_menu_items', 99 );
Brian Cryer
la source