Does anyone know how to add an admin menu separator? I found this but it did not help.
Any ideas?
Does anyone know how to add an admin menu separator? I found this but it did not help.
Any ideas?
Here’s a quick and dirty way to get what you want.
WordPress stores admin menu sections in a global array called $menu
. To add a separator you add an element to the $menu
array using an index that is between the indexes of the options that you want to separate.
add_admin_menu_separator()
functionSo I’ve written a function to encapsulate the logic for this I called add_admin_menu_separator()
. You’ll need to pick an array index number that is higher than the option after which you want to add a separator, and then call the function add_admin_menu_separator()
passing said index as your parameter.
For example:
add_admin_menu_separator(37);
add_admin_menu_separator()
function itselfHere’s the definition of the function add_admin_menu_separator()
which you can copy into your theme’s functions.php
file. Yes it is arcane but then so is the code that creates and uses the global $menu
array. (Plans are to eventually deprecate it, thankfully, but that’ll probably be a few years.)
function add_admin_menu_separator($position) {
global $menu;
$index = 0;
foreach($menu as $offset => $section) {
if (substr($section[2],0,9)=='separator')
$index++;
if ($offset>=$position) {
$menu[$position] = array('','read',"separator{$index}",'','wp-menu-separator');
break;
}
}
ksort( $menu );
}
$menu
that you needTo figure out what index number you need you can do a var_dump()
of $GLOBALS['menu']
from within an admin_init
hook. Here’s a bit of code you can drop into your theme’s functions.php
file temporarily to see what the values are. This will only work when requesting a URL starting with /wp-admin/
(but be sure to do with with FTP and not the built in theme editor or you’ll loose access to your site, at least until you get FTP access to your theme’s functions.php
file!):
add_action('admin_init','dump_admin_menu');
function dump_admin_menu() {
if (is_admin()) {
header('Content-Type:text/plain');
var_dump($GLOBALS['menu']);
exit;
}
}
BTW, you might find these links useful in general for working with admin menus:
wp-admin-menu-classes.php
Although my admin menu classes don’t currently offer an easy way to add separators I think I’ll now add that when I have time.