How to Remove All Admin Bar Menu Items?

I’m solving this getting all nodes from the Admin Bar, iterating through them and removing all that doesn’t have a parent.

An exception is made to the User Actions menu (“Howdy, user_name”), which needs an extra checking.

add_action( 'admin_bar_menu', 'wpse_76491_admin_bar_menu', 200 );

function wpse_76491_admin_bar_menu() 
{
    global $wp_admin_bar;   
    if ( !is_object( $wp_admin_bar ) )
        return;

    // Clean the AdminBar
    $nodes = $wp_admin_bar->get_nodes();
    foreach( $nodes as $node )
    {
        // 'top-secondary' is used for the User Actions right side menu
        if( !$node->parent || 'top-secondary' == $node->parent )
        {
            $wp_admin_bar->remove_menu( $node->id );
        }           
    }
    // end Clean
}

This produces the following Admin Bar:
almost clean admin bar


The only remnant is the Debug Bar plugin, which is added with a priority of 1000.

add_action('admin_bar_menu', array(&$this, 'admin_bar_menu'), 1000);

The problem is that if we hook with a priority higher than 200, we cannot add items to the top-secondary node. And that’s a mystery for me…

But ok, that’s a developer item and shouldn’t be an issue. And all 4 extra items added by plugins were removed.


For completeness, an example of what to add after we clean up the Admin Bar. The following goes after // end Clean:

// Conditional button, 'Go to Site' or 'Go to Admin' rendered
$title_goto = is_admin() ? 'Go to site' : 'Go to admin';
$url_goto = is_admin() ? site_url() : admin_url();
$wp_admin_bar->add_menu( array( 
    'id' => 'go_to_site_or_admin', 
    'title' => $title_goto, 
    'href' => $url_goto
) );
// end Conditional button

// Conditional Logout or Profile button
$title_logout = is_admin() ? 'Logout' : 'Profile';
$url_logout = is_admin() ? wp_logout_url() : get_edit_profile_url( get_current_user_id() );
$wp_admin_bar->add_menu( array(
    'id'    => 'wp-custom-logout',
    'title' => $title_logout,
    'parent'=> 'top-secondary',
    'href'  => $url_logout
) );
// end Conditional Logout/Profile button

// Codex search form item
$codex_search="<form target="_blank" method="get" action="http://wordpress.org/search/do-search.php">
    <input type="text" onblur="this.value=(this.value==\"\') ? \'Search the Codex\' : this.value;" onfocus="this.value=(this.value==\'Search the Codex\') ? \'\' : this.value;" maxlength="100" value="Search the Codex" name="search" class="adminbar-input">
</form>';

$wp_admin_bar->add_menu( array( 
    'parent' => 'top-secondary', 
    'title' => $codex_search, 
    'href' => FALSE 
) );

This will produce a different Admin Bar if viewing the admin or the site.

backend admin bar

frontend admin bar

Leave a Comment