web-dev-qa-db-fra.com

Possibilité de masquer l'interface utilisateur/le type de publication personnalisée à partir de rôles d'utilisateur spécifiques?

Ce que je cherche à faire est de cacher complètement l'interface utilisateur d'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 à ces CPT, mais rien qui ne vous permette vraiment de cacher complètement l'interface utilisateur de CPT tous ensemble en fonction de quel utilisateur est 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. S'ils peuvent voir l'interface utilisateur CPT du magasin dans le tableau de bord, le fait que leurs capacités soient restreintes ne fait aucune différence, car ils vont toujours demander des informations. comment ils peuvent s'y prendre pour ajouter un produit par eux-mêmes.

Je préférerais vraiment ne pas accomplir cela avec un plugin, mais s'il y a quelque chose qui peut faire l'affaire d'une manière non gonflée, cela serait quand même génial, je suppose.

Merci pour votre aide, SB

19
Mr.Brown

Pour masquer un élément de menu de type 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 actuel.

MODIFIER-

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 -

Supprimer les éléments du menu du plugin.

Pour les plugins, il semble que vous n’ayez besoin que de la requête page= var. L'autre chose à noter est la priorité, qui est le troisième argument du admin_menuadd_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 );
36
Milo

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

if( !current_user_can( 'administrator' ) ) {
    remove_action( 'admin_menu', 'cptui_plugin_menu' );
}
1
Grant

Vous pouvez également utiliser le plugin Adminimize . Ce plugin propose des options pour tous les types de publication, les boîtes à méta et bien d’autres à masquer pour différents rôles. Pas de codage.

1
bueltge

Pour masquer les sous-menus de Woocommerce dans le menu principal "Produits" de tous les rôles d’utilisateur 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 );

Si vous souhaitez masquer le menu de ce plugin dont le nom est "Custom Post Type UI" a.k.a 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');
0
merkjs