How to remove entire admin menu?

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?

Read More

Thanks

Related posts

Leave a Reply

5 comments

  1. 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

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

    A solution is to hook in 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:

  3. 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.

  4. I improve the solution of @brasofilo as it is have small bug – on page reload with not best internet connection menu will appear for very short time. To avoid it I added a bit of more css:

    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 !important; }
    #adminmenuback, #adminmenuwrap { display: none !important; }
    </style>
    <script type="text/javascript">
    jQuery(document).ready( function($) {
        $('#adminmenuback, #adminmenuwrap').remove();
    });
    </script>
    HTML;
    
        }
    }