4

I want to add a link to my site in the admin bar, and make that link the leftmost item in the admin bar. I can add a link with this in a plugin function:

$wp_admin_bar->add_menu( array(
        'id' => 'my-link',
        'title' => __('MySite'),
        'href' => site_url() 
    ) );

But I'd like to make it the leftmost link in the admin bar, i.e. all the way in the top left corner. Is there a way to do this?

3 Answers 3

9

If I am correct these are the default positions:

  • wp_admin_bar_wp_menu - 10
  • wp_admin_bar_my_sites_menu - 20
  • wp_admin_bar_site_menu - 30
  • wp_admin_bar_updates_menu - 40
  • wp_admin_bar_comments_menu - 60
  • wp_admin_bar_new_content_menu - 70
  • wp_admin_bar_edit_menu - 80

small code snippet from what I use:
add_action('admin_bar_menu', 'your_function_name', 10);

The 10 should bring it to the most left side in the adminbar.

At moment we are at WP version 3.8 and it still work like a charm.

Added example:

function add_item($admin_bar)  {
$args = array(
    'id'        => 'your-link', // Must be a unique name
    'title'     => 'Yoursite', // Label for this item
    'href'      =>__ ('your_site_url'),
    'meta'  => array(
        'target'=> '_blank', // Opens the link with a new tab
        'title' => __('Yoursite'), // Text will be shown on hovering
    ),
);
$admin_bar->add_menu( $args);
}
add_action('admin_bar_menu', 'add_item', 10); // 10 = Position on the admin bar
2
  • 2
    doesn't work for me Nov 17, 2014 at 8:20
  • note that they are in chunks of 10 for a reason - I wanted an item to appear right after the "edit post" link, so I used 81 Feb 9, 2021 at 18:48
2

I attempted Charles solution but with no success. I did find out though that you can specify whether which side of the admin bar your content is added.

Using

add_action( 'admin_bar_menu', 'yourfunctionname' );

will add your new content to the left side of the admin bar before the default content.

Using

add_action( 'wp_before_admin_bar_render', 'yourfunctionname' );

will add your new content to the right side of the admin bar after the default content.

0

If you want to completely reorganize the admin bar you must use WP_Admin_Bar().

Example:

function reorder_admin_bar() {
    global $wp_admin_bar;

    // The desired order of identifiers (items)
    $IDs_sequence = array(
        'wp-logo',
        'site-name',
        'new-content',
        'edit'
    );

    // Get an array of all the toolbar items on the current
    // page
    $nodes = $wp_admin_bar->get_nodes();

    // Perform recognized identifiers
    foreach ( $IDs_sequence as $id ) {
        if ( ! isset($nodes[$id]) ) continue;

        // This will cause the identifier to act as the last
        // menu item
        $wp_admin_bar->remove_node($id);
        $wp_admin_bar->add_node($nodes[$id]);

        // Remove the identifier from the list of nodes
        unset($nodes[$id]);
    }

    // Unknown identifiers will be moved to appear after known
    // identifiers
    foreach ( $nodes as $id => &$obj ) {
        // There is no need to organize unknown children
        // identifiers (sub items)
        if ( ! empty($obj->parent) ) continue;

        // This will cause the identifier to act as the last
        // menu item
        $wp_admin_bar->remove_node($id);
        $wp_admin_bar->add_node($obj);
    }
}
add_action( 'wp_before_admin_bar_render', 'reorder_admin_bar');

https://codex.wordpress.org/Class_Reference/WP_Admin_Bar

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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