是否可以对特定用户角色隐藏自定义发布类型UI/菜单?

时间:2011-09-17 作者:Mr.Brown

我想做的是从特定的用户角色中完全隐藏自定义帖子类型的UI。。。Ive之前找到了许多关于如何禁用使用这些CPT的访问的资源,但没有任何资源真正允许您根据用户登录到仪表板的内容完全隐藏CPT UI。

这一点很重要,因为我需要客户完全远离商店的自定义帖子类型,如果他们可以在仪表板中看到商店CPT UI,那么如果他们的功能受到限制,也没有什么区别,因为他们仍然会询问如何自己添加产品。

我真的不喜欢用插件来完成这一点,但是如果有什么东西可以以一种不臃肿的方式来完成这一点,我想那还是很好的。

谢谢你的帮助,SB

6 个回复
最合适的回答,由SO网友:Milo 整理而成

要对非管理员用户隐藏帖子类型菜单项,请执行以下操作:

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 应为实际职位类型的名称。

EDIT-

可以删除的其他菜单页:

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 -

删除插件菜单项

对于插件,似乎您只需要page= 另一个需要注意的是优先级,它是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 );

SO网友:Grant

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

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

SO网友:bueltge

您还可以使用Adminimize 插件。这个插件可以选择所有帖子类型、元框以及更多隐藏在不同角色上的选项。无编码。

SO网友:merkdev

如果您想隐藏该插件的菜单(名称为“Custom Post Type UI”又称CPTUI),则无法将第一个链接与remove\\u menu\\u页面相结合。

你所要做的就是;

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

SO网友:Linda Sturling Graphic Design

要隐藏所有商店经理用户角色(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 );

SO网友:Brian Cryer

如果remove_menu_page 不适用于你(我不适用),那么除了删除菜单之外,另一种方法是告诉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 );

结束

相关推荐

插件:Google Analytics for Dashboard错误-时间戳与当前时间相差太远

有人用过Google Analytics for Dashboard 插件?我已经成功安装了它,但每当我尝试使用开始登录过程按钮将其链接到我的Google帐户时,我总是收到一条奇怪的消息,如下所示:Timestamp is too far from current time: <a Unix timestamp here> 我正在使用WordPress 3.1.3。知道这里发生了什么吗?谢谢,我