Tell me more ×
WordPress Answers is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I need to customize the admin panel for my user. So how do I remove the entire admin menu? Not remove the menu item, I mean entirely remove the left vertical menu bar, include the design of the menu (eg, css, background..etc). I want it become blank.

I can do it by css hack. But I prefer to use hook to do it. Any ideas?

Thanks

share|improve this question
I'm curious. If your users don't need access to any of the admin menu items, why do they need access to the dashboard at all? – moraleida May 15 '12 at 1:35
Wondering on the motives... Do you want to hide it for specific roles/users? Are you making a custom Admin Bar menu (at the top)? – brasofilo May 15 '12 at 1:49
Yes, I would like to customize the admin menu. Not that the current admin menu is not good enough, it just too 'wordpress' feel. Not good for branding, in my opinion. – tc.k May 15 '12 at 11:05

3 Answers

up vote 2 down vote accepted

The correct hook to use is admin_menu and then create a function to remove the menus you want to remove. The following 2 functions remove all the menus.

add_action( 'admin_menu', 'remove_admin_menus' );
add_action( 'admin_menu', 'remove_admin_submenus' );

//Remove top level admin menus
function remove_admin_menus() {
    remove_menu_page( 'edit-comments.php' );
    remove_menu_page( 'link-manager.php' );
    remove_menu_page( 'tools.php' );
    remove_menu_page( 'plugins.php' );
    remove_menu_page( 'users.php' );
    remove_menu_page( 'options-general.php' );
    remove_menu_page( 'upload.php' );
    remove_menu_page( 'edit.php' );
    remove_menu_page( 'edit.php?post_type=page' );
    remove_menu_page( 'themes.php' );
}


//Remove sub level admin menus
function remove_admin_submenus() {
    remove_submenu_page( 'themes.php', 'theme-editor.php' );
    remove_submenu_page( 'themes.php', 'themes.php' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=post_tag' );
    remove_submenu_page( 'edit.php', 'edit-tags.php?taxonomy=category' );
    remove_submenu_page( 'edit.php', 'post-new.php' );
    remove_submenu_page( 'themes.php', 'nav-menus.php' );
    remove_submenu_page( 'themes.php', 'widgets.php' );
    remove_submenu_page( 'themes.php', 'theme-editor.php' );
    remove_submenu_page( 'plugins.php', 'plugin-editor.php' );
    remove_submenu_page( 'plugins.php', 'plugin-install.php' );
    remove_submenu_page( 'users.php', 'users.php' );
    remove_submenu_page( 'users.php', 'user-new.php' );
    remove_submenu_page( 'upload.php', 'media-new.php' );
    remove_submenu_page( 'options-general.php', 'options-writing.php' );
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );
    remove_submenu_page( 'options-general.php', 'options-reading.php' );
    remove_submenu_page( 'options-general.php', 'options-discussion.php' );
    remove_submenu_page( 'options-general.php', 'options-media.php' );
    remove_submenu_page( 'options-general.php', 'options-privacy.php' );
    remove_submenu_page( 'options-general.php', 'options-permalinks.php' );
    remove_submenu_page( 'index.php', 'update-core.php' );
}

Screenshot of left menu using the above 2 functions:

enter image description here

share|improve this answer
1  
I did find another way by using $GLOBALS['menu'] = array();. Giving null in the array will also do the work. – tc.k May 15 '12 at 11:13

The only hook-friendly way I know is to use remove_menu_page() for every single menu item. Even then, I don't know what happens to the left bar itself (whether it would collapse down to 0px width or what). Even with using the hooks, I imagine at some point you'll want to enqueue an admin stylesheet to cleanup what remains of the menu markup styles.

I would be careful about doing this. For instance, if you remove "Settings," then any plugins that creates menu pages in the "Settings" menu can't be reached. In general, I wonder how sustainable it really is to completely remove the menu.

share|improve this answer

Following the lead of /wp-admin/admin-header.php -> /wp-admin/menu-header.php there's no hook to do it.

I don't doubt any of the wizards of this digital land can pull a nice trick that will do it. What I doubt is that they'll even consider it... But who knows...

Otherwise the way is to hook in the admin_head and do some CSS + jQuery

add_action('admin_head', 'wpse_52099_script_enqueuer');
function wpse_52099_script_enqueuer(){
    if(!current_user_can('administrator')) {
        echo <<<HTML
        <style type="text/css">
        #wpcontent, #footer { margin-left: 0px; }
        </style>
        <script type="text/javascript">
        jQuery(document).ready( function($) {
            $('#adminmenuback, #adminmenuwrap').remove();
        });     
        </script>
HTML;
    }
}

[update]
As per a clarification to the question, where it gets clear that the motivation is branding the admin area, these are the 4 plugins that I use for that:

share|improve this answer
If you go this route, it makes more sense to use wp_enqueue_script() with admin_enqueue_script hook. – mrwweb May 15 '12 at 1:55
1  
@mrwweb Even when it is such a small insertion? Do you think is worthy? – brasofilo May 15 '12 at 2:01
Agreed. Small script/style insertions are more easily done with admin_head. – chrisguitarguy May 15 '12 at 3:18
I don't like using the jquery unless I have no other choice. What if the visitors disable the javascript on their browser? Though, there is not likely to happen, but there is the possibility there. Anyway thanks for the advice. – tc.k May 15 '12 at 11:10
In my example, it'll be a matter of double removing by also hiding the 2 divs in CSS as well. – brasofilo May 15 '12 at 12:06

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.