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

这很重要,因为我需要客户完全不使用商店的自定义帖子类型,并且如果他们可以在仪表板上看到商店CPT UI,那么他们的功能也不会有所不同受到限制,因为他们仍然要询问如何才能自己添加产品。

Id确实更喜欢不使用插件来完成此操作,但是如果有可以解决问题的方法我认为,以一种非blo肿的方式仍然会很棒。

感谢您的帮助,
SB

#1 楼

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

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


评论


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

–布朗先生
2011年9月17日19:28在

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

–布朗先生
2011-09-17 19:32



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

–米洛
2011年9月17日在20:05

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

–布朗先生
2011年9月17日在20:06

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

–布朗先生
2011-09-17 20:11



#2 楼

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

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


#3 楼

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

#4 楼

如果要隐藏名称为“ 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');


#5 楼

要为所有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 );


#6 楼

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