Reordering admin menu in WordPress

Here’s a quick snippet to reorder the admin menu in WordPress.

Simply specify the order you want in the $reordered_items array (you can var_dump($menu_order) to find all available menu items.

The items will be inserted under the topmost link (Dashboard).

add_filter('menu_order', 'reorder_admin_menu', 999);

/**
 * Reorders admin menu to match the wanted order
 *
 * @param $menu_order
 * @return mixed
 */
function reorder_admin_menu($menu_order) {

  //Example. Puts "Pages" above "Posts".
  $reordered_items = array(
    'edit.php?post_type=page',
    'edit.php'
  );

  //This is where we will insert our reordered items
  $reordered_items_insertion_point = 'index.php';

  //Remove items we are supposed to reorder
  $filtered_menu_order = array_diff($menu_order, $reordered_items);

  //Init new order
  $new_menu_order = array();

  //Loop all current menu items
  foreach($filtered_menu_order as $menu_item) {

    //Add to array
    $new_menu_order[] = $menu_item;

    //Our trigger? Let's go!
    if($menu_item === $reordered_items_insertion_point) {

      //Add in our reordered items
      $new_menu_order = array_merge($new_menu_order, $reordered_items);
    }
  }

  return $new_menu_order;
}

Leave a Reply

Your email address will not be published. Required fields are marked *

Markdown is allowed in comments.