可以从特定用户角色隐藏“自定义帖子类型” UI /菜单吗?


20

我想要做的是完全隐藏特定用户角色的自定义帖子类型的用户界面...以前我已经找到了很多有关如何禁止使用这些CPT的资源,但没有什么可以真正让您完全隐藏CPT UI所有这些都基于登录到仪表板的用户。

这很重要,因为我需要客户完全不使用商店的自定义帖子类型,而且如果客户可以在仪表板上看到商店的CPT UI,则仍然可以查询他们的功能是否有所限制,因为他们仍然要查询结果他们如何继续自己添加产品。

我真的很喜欢不使用插件来完成此操作,但是我想,如果有某种方法能够以一种非ated肿的方式完成任务,那仍然很好。

谢谢您的帮助,SB

Answers:


39

要向非管理员用户隐藏帖子类型菜单项:

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 应该是您实际帖子类型的名称。

编辑-

您可以删除的其他菜单页面:

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

编辑2-

删除插件菜单项。

对于插件,似乎只需要page=查询var。要注意的另一件事是优先级,它是的第三个参数admin_menu add_action。它必须设置得足够低(数字越大,优先级越低),以便插件已经将自己添加到菜单中。

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 );

如此简单的解决方案,谢谢您的完美配合!
布朗先生,

很好奇,wpse28782_remove_menu_items您是随机选择的函数名称还是特定于WP?...。此外,我将如何扩展该构想并针对其他CPT,或者就此而言其他本机WP菜单?再次感谢您的帮助!
布朗先生

1
@ Mr.Brown-函数名称基于您问题的ID(请检查url),只是可以保证唯一的东西,只要它不是现有函数,您就可以随意命名。您还可以添加其他remove_menu_page呼叫以删除其他CPT以及其他菜单项,请参见我的编辑。
Milo

太棒了,再次感谢。这是一个了不起的解决方案。
布朗先生

最后一件事-如何从当前安装的插件中​​查找用于其他菜单的模板名称?即。remove_menu_page('cart_plugin');
布朗先生

2

接受的答案可用于隐藏自定义帖子类型(和其他分类项目),如所述。但是,如果您想隐藏CPT UI插件菜单本身,则也可以删除将其添加到菜单中的操作。

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

1

您也可以使用Adminimize插件。该插件具有用于所有帖子类型,元框的选项,以及更多隐藏在不同角色上的选项。没有编码。


0

如果要隐藏名称为“ Custom Post Type UI”(也称为CPTUI)的插件菜单,则无法将第一个链接与remove_menu_page结合使用。

您所要做的就是;

function wpse_28782_remove_menus() {
    remove_menu_page('cptui_main_menu');
}
add_action('admin_init', 'wpse_28782_remove_menus');

0

要为所有Shop Manager用户角色(Wordpress 5.1.1)在顶级菜单“产品”下隐藏Woocommerce子菜单:

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 );

0

如果remove_menu_page不适合您(不适合我),则可以删除WordPress,而不是删除菜单,而是告诉WordPress不要显示帖子类型的菜单:

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 );
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.