2003-05-28 09:54:49 +02:00
< ? php
2008-08-14 08:30:38 +02:00
/**
* Build Administration Menu .
*
* @ package WordPress
* @ subpackage Administration
*/
/**
* Constructs the admin menu bar .
*
* The elements in the array are :
* 0 : Menu item name
* 1 : Minimum level or capability required .
* 2 : The URL of the item ' s file
2008-10-14 07:10:16 +02:00
* 3 : Class
2008-10-24 00:19:19 +02:00
* 4 : ID
2008-12-09 19:03:31 +01:00
* 5 : Icon for top level menu
2008-08-14 08:30:38 +02:00
*
* @ global array $menu
* @ name $menu
* @ var array
*/
2007-02-27 16:24:54 +01:00
2008-04-17 01:45:39 +02:00
$awaiting_mod = wp_count_comments ();
$awaiting_mod = $awaiting_mod -> moderated ;
2004-08-23 01:24:50 +02:00
2010-01-07 00:41:03 +01:00
if ( is_multisite () && is_super_admin () ) {
2010-02-01 21:01:14 +01:00
/* translators: Network menu item */
2010-03-11 18:05:16 +01:00
$menu [ 0 ] = array ( __ ( 'Super Admin' ), 'manage_network' , 'ms-admin.php' , '' , 'menu-top menu-top-first menu-icon-site' , 'menu-site' , 'div' );
2010-02-22 19:41:38 +01:00
$submenu [ 'ms-admin.php' ][ 1 ] = array ( __ ( 'Admin' ), 'manage_network' , 'ms-admin.php' );
2010-02-01 21:01:14 +01:00
/* translators: Sites menu item */
2010-02-22 19:41:38 +01:00
$submenu [ 'ms-admin.php' ][ 5 ] = array ( __ ( 'Sites' ), 'manage_sites' , 'ms-sites.php' );
$submenu [ 'ms-admin.php' ][ 10 ] = array ( __ ( 'Users' ), 'manage_network_users' , 'ms-users.php' );
$submenu [ 'ms-admin.php' ][ 20 ] = array ( __ ( 'Themes' ), 'manage_network_themes' , 'ms-themes.php' );
$submenu [ 'ms-admin.php' ][ 25 ] = array ( __ ( 'Options' ), 'manage_network_options' , 'ms-options.php' );
2010-03-05 00:28:15 +01:00
$submenu [ 'ms-admin.php' ][ 30 ] = array ( __ ( 'Update' ), 'manage_network' , 'ms-upgrade-network.php' );
2010-02-04 21:32:06 +01:00
$menu [ 1 ] = array ( '' , 'read' , 'separator1' , '' , 'wp-menu-separator' );
2010-02-07 05:13:22 +01:00
2010-03-11 18:05:16 +01:00
$menu [ 2 ] = array ( __ ( 'Dashboard' ), 'read' , 'index.php' , '' , 'menu-top menu-icon-dashboard' , 'menu-dashboard' , 'div' );
2010-02-07 05:13:22 +01:00
} else {
2010-03-11 18:05:16 +01:00
$menu [ 2 ] = array ( __ ( 'Dashboard' ), 'read' , 'index.php' , '' , 'menu-top menu-top-first menu-icon-dashboard' , 'menu-dashboard' , 'div' );
2010-02-04 21:32:06 +01:00
}
2010-03-05 07:20:41 +01:00
if ( is_multisite () || is_super_admin () ) {
2010-02-04 21:32:06 +01:00
$submenu [ 'index.php' ][ 0 ] = array ( __ ( 'Dashboard' ), 'read' , 'index.php' );
2010-03-05 00:11:51 +01:00
2010-03-05 07:20:41 +01:00
if ( is_multisite () )
$submenu [ 'index.php' ][ 5 ] = array ( __ ( 'My Sites' ), 'read' , 'my-sites.php' );
2010-03-17 17:27:25 +01:00
2010-03-05 13:45:24 +01:00
if ( is_super_admin () ) {
2010-03-06 14:22:56 +01:00
$plugin_update_count = $theme_update_count = $wordpress_update_count = 0 ;
2010-03-05 13:45:24 +01:00
$update_plugins = get_site_transient ( 'update_plugins' );
if ( ! empty ( $update_plugins -> response ) )
2010-03-06 14:22:56 +01:00
$plugin_update_count = count ( $update_plugins -> response );
2010-03-05 13:45:24 +01:00
$update_themes = get_site_transient ( 'update_themes' );
if ( ! empty ( $update_themes -> response ) )
2010-03-06 14:22:56 +01:00
$theme_update_count = count ( $update_themes -> response );
2010-03-05 13:45:24 +01:00
$update_wordpress = get_core_updates ( array ( 'dismissed' => false ) );
2010-03-06 09:42:04 +01:00
if ( ! empty ( $update_wordpress ) && ! in_array ( $update_wordpress [ 0 ] -> response , array ( 'development' , 'latest' ) ) )
2010-03-06 14:22:56 +01:00
$wordpress_update_count = 1 ;
2010-03-05 13:45:24 +01:00
2010-03-06 14:22:56 +01:00
$update_count = $plugin_update_count + $theme_update_count + $wordpress_update_count ;
$update_title = array ();
if ( $wordpress_update_count )
$update_title [] = sprintf ( __ ( '%d WordPress Update' ), $wordpress_update_count );
if ( $plugin_update_count )
$update_title [] = sprintf ( _n ( '%d Plugin Update' , '%d Plugin Updates' , $plugin_update_count ), $plugin_update_count );
if ( $theme_update_count )
$update_title [] = sprintf ( _n ( '%d Theme Update' , '%d Themes Updates' , $theme_update_count ), $theme_update_count );
2010-03-05 13:45:24 +01:00
2010-03-06 14:22:56 +01:00
$update_title = ! empty ( $update_title ) ? esc_attr ( implode ( ', ' , $update_title )) : '' ;
$submenu [ 'index.php' ][ 10 ] = array ( sprintf ( __ ( 'Updates %s' ), " <span class='update-plugins count- $update_count ' title=' $update_title '><span class='update-count'> " . number_format_i18n ( $update_count ) . " </span></span> " ), 'install_plugins' , 'update-core.php' );
unset ( $plugin_update_count , $theme_update_count , $wordpress_update_count , $update_count , $update_title );
2010-03-05 13:45:24 +01:00
}
2010-03-05 07:20:41 +01:00
}
2010-01-07 00:41:03 +01:00
2009-04-27 07:09:50 +02:00
$menu [ 4 ] = array ( '' , 'read' , 'separator1' , '' , 'wp-menu-separator' );
2008-10-14 07:10:16 +02:00
2010-04-16 05:29:34 +02:00
$menu [ 5 ] = array ( __ ( 'Posts' ), 'edit_posts' , 'edit.php' , '' , 'open-if-no-js menu-top menu-icon-post' , 'menu-posts' , 'div' );
2008-11-25 20:05:48 +01:00
$submenu [ 'edit.php' ][ 5 ] = array ( __ ( 'Edit' ), 'edit_posts' , 'edit.php' );
2009-03-02 20:20:19 +01:00
/* translators: add new post */
$submenu [ 'edit.php' ][ 10 ] = array ( _x ( 'Add New' , 'post' ), 'edit_posts' , 'post-new.php' );
2009-02-12 09:00:29 +01:00
$i = 15 ;
foreach ( $wp_taxonomies as $tax ) {
2010-02-19 11:21:29 +01:00
if ( ! $tax -> show_ui || ! in_array ( 'post' , ( array ) $tax -> object_type , true ) )
2009-02-12 09:00:29 +01:00
continue ;
2010-02-19 11:26:44 +01:00
$submenu [ 'edit.php' ][ $i ++ ] = array ( esc_attr ( $tax -> label ), $tax -> manage_cap , 'edit-tags.php?taxonomy=' . $tax -> name );
2009-02-12 09:00:29 +01:00
}
2010-01-26 19:09:45 +01:00
unset ( $tax );
2009-02-12 09:00:29 +01:00
2010-03-11 18:05:16 +01:00
$menu [ 10 ] = array ( __ ( 'Media' ), 'upload_files' , 'upload.php' , '' , 'menu-top menu-icon-media' , 'menu-media' , 'div' );
2008-11-25 20:07:57 +01:00
$submenu [ 'upload.php' ][ 5 ] = array ( __ ( 'Library' ), 'upload_files' , 'upload.php' );
2009-03-02 20:20:19 +01:00
/* translators: add new file */
$submenu [ 'upload.php' ][ 10 ] = array ( _x ( 'Add New' , 'file' ), 'upload_files' , 'media-new.php' );
2008-11-25 20:05:48 +01:00
2010-03-11 18:05:16 +01:00
$menu [ 15 ] = array ( __ ( 'Links' ), 'manage_links' , 'link-manager.php' , '' , 'menu-top menu-icon-links' , 'menu-links' , 'div' );
2008-11-25 20:05:48 +01:00
$submenu [ 'link-manager.php' ][ 5 ] = array ( __ ( 'Edit' ), 'manage_links' , 'link-manager.php' );
2009-03-02 20:20:19 +01:00
/* translators: add new links */
2010-01-21 22:37:43 +01:00
$submenu [ 'link-manager.php' ][ 10 ] = array ( _x ( 'Add New' , 'link' ), 'manage_links' , 'link-add.php' );
2008-11-25 20:05:48 +01:00
$submenu [ 'link-manager.php' ][ 15 ] = array ( __ ( 'Link Categories' ), 'manage_categories' , 'edit-link-categories.php' );
2010-04-16 05:29:34 +02:00
$menu [ 20 ] = array ( __ ( 'Pages' ), 'edit_pages' , 'edit.php?post_type=page' , '' , 'menu-top menu-icon-page' , 'menu-pages' , 'div' );
2010-01-15 17:58:36 +01:00
$submenu [ 'edit.php?post_type=page' ][ 5 ] = array ( __ ( 'Edit' ), 'edit_pages' , 'edit.php?post_type=page' );
2009-03-02 20:20:19 +01:00
/* translators: add new page */
2010-01-15 17:58:36 +01:00
$submenu [ 'edit.php?post_type=page' ][ 10 ] = array ( _x ( 'Add New' , 'page' ), 'edit_pages' , 'post-new.php?post_type=page' );
2008-09-25 21:33:53 +02:00
2010-03-11 18:05:16 +01:00
$menu [ 25 ] = array ( sprintf ( __ ( 'Comments %s' ), " <span id='awaiting-mod' class='count- $awaiting_mod '><span class='pending-count'> " . number_format_i18n ( $awaiting_mod ) . " </span></span> " ), 'edit_posts' , 'edit-comments.php' , '' , 'menu-top menu-icon-comments' , 'menu-comments' , 'div' );
2008-09-25 21:33:53 +02:00
2008-11-05 23:46:58 +01:00
$_wp_last_object_menu = 25 ; // The index of the last top-level menu in the object menu group
2010-02-06 18:27:30 +01:00
foreach ( ( array ) get_post_types ( array ( 'show_ui' => true ) ) as $ptype ) {
2010-04-16 05:29:34 +02:00
$ptype_obj = get_post_type_object ( $ptype );
$ptype_menu_position = is_int ( $ptype_obj -> menu_position ) ? $ptype_obj -> menu_position : $_wp_last_object_menu ++ ; // If we're to use $_wp_last_object_menu, increment it first.
if ( is_string ( $ptype_obj -> menu_icon ) ) {
$menu_icon = esc_url ( $ptype_obj -> menu_icon );
$ptype_class = sanitize_html_class ( $ptype );
} else {
$menu_icon = 'div' ;
$ptype_class = 'post' ;
}
2010-04-10 12:48:30 +02:00
// if $ptype_menu_position is already populated or will be populated by a hard-coded value below, increment the position.
$core_menu_positions = array ( 59 , 60 , 65 , 70 , 75 , 80 , 85 , 99 );
while ( isset ( $menu [ $ptype_menu_position ]) || in_array ( $ptype_menu_position , $core_menu_positions ) )
$ptype_menu_position ++ ;
2010-04-16 05:29:34 +02:00
$menu [ $ptype_menu_position ] = array ( esc_attr ( $ptype_obj -> label ), $ptype_obj -> edit_type_cap , " edit.php?post_type= $ptype " , '' , 'menu-top menu-icon-' . $ptype_class , 'menu-' . $ptype_class , $menu_icon );
2010-03-27 07:40:59 +01:00
$submenu [ " edit.php?post_type= $ptype " ][ 5 ] = array ( __ ( 'Edit' ), $ptype_obj -> edit_type_cap , " edit.php?post_type= $ptype " );
2010-01-04 17:58:43 +01:00
/* translators: add new custom post type */
2010-03-27 07:40:59 +01:00
$submenu [ " edit.php?post_type= $ptype " ][ 10 ] = array ( _x ( 'Add New' , 'post' ), $ptype_obj -> edit_type_cap , " post-new.php?post_type= $ptype " );
2010-01-04 17:58:43 +01:00
$i = 15 ;
foreach ( $wp_taxonomies as $tax ) {
2010-02-19 11:21:29 +01:00
if ( ! $tax -> show_ui || ! in_array ( $ptype , ( array ) $tax -> object_type , true ) )
2010-01-04 17:58:43 +01:00
continue ;
2010-02-19 11:26:44 +01:00
$submenu [ " edit.php?post_type= $ptype " ][ $i ++ ] = array ( esc_attr ( $tax -> label ), $tax -> manage_cap , " edit-tags.php?taxonomy= $tax->name &post_type= $ptype " );
2010-01-04 17:58:43 +01:00
}
}
unset ( $ptype , $ptype_obj );
2009-04-27 07:09:50 +02:00
$menu [ 59 ] = array ( '' , 'read' , 'separator2' , '' , 'wp-menu-separator' );
2008-10-14 07:10:16 +02:00
2010-03-11 18:05:16 +01:00
$menu [ 60 ] = array ( __ ( 'Appearance' ), 'switch_themes' , 'themes.php' , '' , 'menu-top menu-icon-appearance' , 'menu-appearance' , 'div' );
2008-09-25 21:33:53 +02:00
$submenu [ 'themes.php' ][ 5 ] = array ( __ ( 'Themes' ), 'switch_themes' , 'themes.php' );
2010-03-04 13:23:21 +01:00
$submenu [ 'themes.php' ][ 10 ] = array ( __ ( 'Menus' ), 'switch_themes' , 'nav-menus.php' );
2010-03-04 13:25:38 +01:00
// Add 'Editor' to the bottom of the Appearence menu.
2010-03-04 13:23:21 +01:00
add_action ( 'admin_menu' , '_add_themes_utility_last' , 101 );
function _add_themes_utility_last () {
2010-03-21 02:01:45 +01:00
// Must use API on the admin_menu hook, direct modification is only possible on/before the _admin_menu hook
add_submenu_page ( 'themes.php' , _x ( 'Editor' , 'theme editor' ), _x ( 'Editor' , 'theme editor' ), 'edit_themes' , 'theme-editor.php' );
2010-03-04 13:23:21 +01:00
}
2008-09-25 21:33:53 +02:00
2010-01-08 21:49:55 +01:00
$update_plugins = get_site_transient ( 'update_plugins' );
2008-11-02 21:42:43 +01:00
$update_count = 0 ;
if ( ! empty ( $update_plugins -> response ) )
$update_count = count ( $update_plugins -> response );
2010-01-07 01:17:13 +01:00
$menu_perms = get_site_option ( 'menu_items' , array ());
2010-01-26 18:54:45 +01:00
if ( is_super_admin () || ( is_multisite () && isset ( $menu_perms [ 'plugins' ]) && $menu_perms [ 'plugins' ] ) ) {
2010-03-11 18:05:16 +01:00
$menu [ 65 ] = array ( sprintf ( __ ( 'Plugins %s' ), " <span class='update-plugins count- $update_count '><span class='plugin-count'> " . number_format_i18n ( $update_count ) . " </span></span> " ), 'activate_plugins' , 'plugins.php' , '' , 'menu-top menu-icon-plugins' , 'menu-plugins' , 'div' );
2010-01-07 01:17:13 +01:00
$submenu [ 'plugins.php' ][ 5 ] = array ( __ ( 'Installed' ), 'activate_plugins' , 'plugins.php' );
2010-01-18 23:21:36 +01:00
/* translators: add new plugin */
$submenu [ 'plugins.php' ][ 10 ] = array ( _x ( 'Add New' , 'plugin' ), 'install_plugins' , 'plugin-install.php' );
2010-02-06 07:49:11 +01:00
$submenu [ 'plugins.php' ][ 15 ] = array ( _x ( 'Editor' , 'plugin editor' ), 'edit_plugins' , 'plugin-editor.php' );
2010-01-07 01:17:13 +01:00
}
2010-01-26 19:09:45 +01:00
unset ( $menu_perms , $update_plugins , $update_count );
2008-10-02 20:52:45 +02:00
if ( current_user_can ( 'edit_users' ) )
2010-03-11 18:05:16 +01:00
$menu [ 70 ] = array ( __ ( 'Users' ), 'edit_users' , 'users.php' , '' , 'menu-top menu-icon-users' , 'menu-users' , 'div' );
2008-10-02 20:52:45 +02:00
else
2010-03-11 18:05:16 +01:00
$menu [ 70 ] = array ( __ ( 'Profile' ), 'read' , 'profile.php' , '' , 'menu-top menu-icon-users' , 'menu-users' , 'div' );
2008-10-02 20:52:45 +02:00
if ( current_user_can ( 'edit_users' ) ) {
$_wp_real_parent_file [ 'profile.php' ] = 'users.php' ; // Back-compat for plugins adding submenus to profile.php.
$submenu [ 'users.php' ][ 5 ] = array ( __ ( 'Authors & Users' ), 'edit_users' , 'users.php' );
2010-02-01 09:12:56 +01:00
$submenu [ 'users.php' ][ 10 ] = array ( _x ( 'Add New' , 'user' ), 'create_users' , 'user-new.php' );
2010-01-15 23:11:12 +01:00
2008-11-11 20:47:22 +01:00
$submenu [ 'users.php' ][ 15 ] = array ( __ ( 'Your Profile' ), 'read' , 'profile.php' );
2008-10-02 20:52:45 +02:00
} else {
$_wp_real_parent_file [ 'users.php' ] = 'profile.php' ;
$submenu [ 'profile.php' ][ 5 ] = array ( __ ( 'Your Profile' ), 'read' , 'profile.php' );
}
2010-04-16 00:16:22 +02:00
$menu [ 75 ] = array ( __ ( 'Tools' ), 'edit_posts' , 'tools.php' , '' , 'menu-top menu-icon-tools' , 'menu-tools' , 'div' );
$submenu [ 'tools.php' ][ 5 ] = array ( __ ( 'Tools' ), 'edit_posts' , 'tools.php' );
2008-11-27 22:11:25 +01:00
$submenu [ 'tools.php' ][ 10 ] = array ( __ ( 'Import' ), 'import' , 'import.php' );
$submenu [ 'tools.php' ][ 15 ] = array ( __ ( 'Export' ), 'import' , 'export.php' );
2010-03-10 17:06:53 +01:00
if ( is_multisite () && ! is_main_site () )
$submenu [ 'tools.php' ][ 25 ] = array ( __ ( 'Delete Site' ), 'manage_options' , 'ms-delete-site.php' );
2010-03-12 00:53:03 +01:00
if ( ( ! is_multisite () || defined ( 'MULTISITE' ) ) && defined ( 'WP_ALLOW_MULTISITE' ) && WP_ALLOW_MULTISITE && is_super_admin () )
2010-01-26 00:07:49 +01:00
$submenu [ 'tools.php' ][ 50 ] = array ( __ ( 'Network' ), 'manage_options' , 'network.php' );
2008-10-02 20:52:45 +02:00
2010-03-11 18:05:16 +01:00
$menu [ 80 ] = array ( __ ( 'Settings' ), 'manage_options' , 'options-general.php' , '' , 'menu-top menu-icon-settings' , 'menu-settings' , 'div' );
2010-01-21 22:37:43 +01:00
$submenu [ 'options-general.php' ][ 10 ] = array ( _x ( 'General' , 'settings screen' ), 'manage_options' , 'options-general.php' );
2008-08-22 01:18:51 +02:00
$submenu [ 'options-general.php' ][ 15 ] = array ( __ ( 'Writing' ), 'manage_options' , 'options-writing.php' );
$submenu [ 'options-general.php' ][ 20 ] = array ( __ ( 'Reading' ), 'manage_options' , 'options-reading.php' );
$submenu [ 'options-general.php' ][ 25 ] = array ( __ ( 'Discussion' ), 'manage_options' , 'options-discussion.php' );
2008-09-17 00:37:49 +02:00
$submenu [ 'options-general.php' ][ 30 ] = array ( __ ( 'Media' ), 'manage_options' , 'options-media.php' );
$submenu [ 'options-general.php' ][ 35 ] = array ( __ ( 'Privacy' ), 'manage_options' , 'options-privacy.php' );
$submenu [ 'options-general.php' ][ 40 ] = array ( __ ( 'Permalinks' ), 'manage_options' , 'options-permalink.php' );
2004-09-11 18:12:40 +02:00
2009-02-13 23:57:02 +01:00
$_wp_last_utility_menu = 80 ; // The index of the last top-level menu in the utility menu group
2008-11-28 20:34:49 +01:00
2009-04-27 07:09:50 +02:00
$menu [ 99 ] = array ( '' , 'read' , 'separator-last' , '' , 'wp-menu-separator-last' );
2008-10-15 08:54:25 +02:00
2008-08-22 06:32:42 +02:00
// Back-compat for old top-levels
2008-12-09 19:03:31 +01:00
$_wp_real_parent_file [ 'post.php' ] = 'edit.php' ;
2008-11-25 20:05:48 +01:00
$_wp_real_parent_file [ 'post-new.php' ] = 'edit.php' ;
2010-02-04 23:09:35 +01:00
$_wp_real_parent_file [ 'edit-pages.php' ] = 'edit.php?post_type=page' ;
$_wp_real_parent_file [ 'page-new.php' ] = 'edit.php?post_type=page' ;
2010-01-21 17:03:29 +01:00
$_wp_real_parent_file [ 'wpmu-admin.php' ] = 'ms-admin.php' ;
2008-08-22 06:32:42 +02:00
2007-05-06 22:36:11 +02:00
do_action ( '_admin_menu' );
2006-05-02 21:08:37 +02:00
// Create list of page plugin hook names.
2006-11-18 08:31:29 +01:00
foreach ( $menu as $menu_page ) {
2010-03-04 01:15:55 +01:00
if ( false !== $pos = strpos ( $menu_page [ 2 ], '?' ) ) {
// Handle post_type=post|page|foo pages.
$hook_name = substr ( $menu_page [ 2 ], 0 , $pos );
$hook_args = substr ( $menu_page [ 2 ], $pos + 1 );
wp_parse_str ( $hook_args , $hook_args );
// Set the hook name to be the post type.
if ( isset ( $hook_args [ 'post_type' ]) )
$hook_name = $hook_args [ 'post_type' ];
else
$hook_name = basename ( $hook_name , '.php' );
unset ( $hook_args );
} else {
$hook_name = basename ( $menu_page [ 2 ], '.php' );
}
$hook_name = sanitize_title ( $hook_name );
2009-05-25 01:47:49 +02:00
2009-04-21 21:49:56 +02:00
// ensure we're backwards compatible
$compat = array (
'index' => 'dashboard' ,
'edit' => 'posts' ,
2010-03-04 01:15:55 +01:00
'post' => 'posts' ,
2009-04-21 21:49:56 +02:00
'upload' => 'media' ,
'link-manager' => 'links' ,
'edit-pages' => 'pages' ,
2010-03-04 01:15:55 +01:00
'page' => 'pages' ,
2009-04-21 21:49:56 +02:00
'edit-comments' => 'comments' ,
'options-general' => 'settings' ,
2009-04-28 21:40:34 +02:00
'themes' => 'appearance' ,
2009-04-21 21:49:56 +02:00
);
2009-05-25 01:47:49 +02:00
2009-04-21 21:49:56 +02:00
if ( isset ( $compat [ $hook_name ]) )
$hook_name = $compat [ $hook_name ];
elseif ( ! $hook_name )
continue ;
2009-05-25 01:47:49 +02:00
2009-04-21 21:49:56 +02:00
$admin_page_hooks [ $menu_page [ 2 ]] = $hook_name ;
2006-11-18 08:31:29 +01:00
}
2010-01-26 19:09:45 +01:00
unset ( $menu_page );
2006-05-02 21:08:37 +02:00
2006-08-16 00:13:36 +02:00
$_wp_submenu_nopriv = array ();
$_wp_menu_nopriv = array ();
2006-02-17 01:57:10 +01:00
// Loop over submenus and remove pages for which the user does not have privs.
2008-09-27 22:44:56 +02:00
foreach ( array ( 'submenu' ) as $sub_loop ) {
2008-08-20 23:42:31 +02:00
foreach ( $$sub_loop as $parent => $sub ) {
foreach ( $sub as $index => $data ) {
if ( ! current_user_can ( $data [ 1 ]) ) {
unset ( ${$sub_loop} [ $parent ][ $index ]);
$_wp_submenu_nopriv [ $parent ][ $data [ 2 ]] = true ;
}
2006-02-17 01:57:10 +01:00
}
2010-01-26 19:09:45 +01:00
unset ( $index , $data );
2006-11-19 08:56:05 +01:00
2008-08-20 23:42:31 +02:00
if ( empty ( ${$sub_loop} [ $parent ]) )
unset ( ${$sub_loop} [ $parent ]);
}
2010-01-26 19:09:45 +01:00
unset ( $sub , $parent );
2006-02-17 01:57:10 +01:00
}
2010-01-26 19:09:45 +01:00
unset ( $sub_loop );
2006-02-17 01:57:10 +01:00
// Loop over the top-level menu.
// Menus for which the original parent is not acessible due to lack of privs will have the next
2006-11-19 08:56:05 +01:00
// submenu in line be assigned as the new menu parent.
2006-08-14 23:24:43 +02:00
foreach ( $menu as $id => $data ) {
2007-09-04 01:32:58 +02:00
if ( empty ( $submenu [ $data [ 2 ]]) )
2006-08-14 23:24:43 +02:00
continue ;
$subs = $submenu [ $data [ 2 ]];
$first_sub = array_shift ( $subs );
$old_parent = $data [ 2 ];
$new_parent = $first_sub [ 2 ];
// If the first submenu is not the same as the assigned parent,
// make the first submenu the new parent.
if ( $new_parent != $old_parent ) {
2006-08-15 23:03:11 +02:00
$_wp_real_parent_file [ $old_parent ] = $new_parent ;
2006-08-14 23:24:43 +02:00
$menu [ $id ][ 2 ] = $new_parent ;
2007-02-27 16:24:54 +01:00
2006-08-14 23:24:43 +02:00
foreach ( $submenu [ $old_parent ] as $index => $data ) {
$submenu [ $new_parent ][ $index ] = $submenu [ $old_parent ][ $index ];
unset ( $submenu [ $old_parent ][ $index ]);
}
2010-01-26 19:09:45 +01:00
unset ( $submenu [ $old_parent ], $index );
2008-09-21 22:41:25 +02:00
if ( isset ( $_wp_submenu_nopriv [ $old_parent ]) )
$_wp_submenu_nopriv [ $new_parent ] = $_wp_submenu_nopriv [ $old_parent ];
2006-08-14 23:24:43 +02:00
}
}
2010-01-26 19:09:45 +01:00
unset ( $id , $data , $subs , $first_sub , $old_parent , $new_parent );
2006-08-14 23:24:43 +02:00
do_action ( 'admin_menu' , '' );
// Remove menus that have no accessible submenus and require privs that the user does not have.
2006-08-15 23:03:11 +02:00
// Run re-parent loop again.
2006-02-17 01:57:10 +01:00
foreach ( $menu as $id => $data ) {
2010-01-16 23:59:27 +01:00
if ( ! current_user_can ( $data [ 1 ]) )
$_wp_menu_nopriv [ $data [ 2 ]] = true ;
2006-02-17 01:57:10 +01:00
// If submenu is empty...
if ( empty ( $submenu [ $data [ 2 ]]) ) {
// And user doesn't have privs, remove menu.
2010-01-16 23:59:27 +01:00
if ( isset ( $_wp_menu_nopriv [ $data [ 2 ]] ) ) {
2006-02-17 01:57:10 +01:00
unset ( $menu [ $id ]);
}
2006-08-15 23:03:11 +02:00
}
2006-02-17 01:57:10 +01:00
}
2010-01-26 19:09:45 +01:00
unset ( $id , $data );
2006-02-17 01:57:10 +01:00
2008-11-30 23:47:26 +01:00
// Remove any duplicated seperators
$seperator_found = false ;
foreach ( $menu as $id => $data ) {
if ( 0 == strcmp ( 'wp-menu-separator' , $data [ 4 ] ) ) {
if ( false == $seperator_found ) {
$seperator_found = true ;
} else {
unset ( $menu [ $id ]);
$seperator_found = false ;
}
} else {
$seperator_found = false ;
}
}
2010-01-26 19:09:45 +01:00
unset ( $id , $data );
2006-10-03 09:15:13 +02:00
2008-11-09 15:54:39 +01:00
function add_cssclass ( $add , $class ) {
$class = empty ( $class ) ? $add : $class .= ' ' . $add ;
return $class ;
}
function add_menu_classes ( $menu ) {
$first = $lastorder = false ;
$i = 0 ;
$mc = count ( $menu );
foreach ( $menu as $order => $top ) {
$i ++ ;
if ( 0 == $order ) { // dashboard is always shown/single
2009-04-27 07:09:50 +02:00
$menu [ 0 ][ 4 ] = add_cssclass ( 'menu-top-first' , $top [ 4 ]);
$lastorder = 0 ;
2008-11-09 15:54:39 +01:00
continue ;
}
2009-04-27 07:09:50 +02:00
if ( 0 === strpos ( $top [ 2 ], 'separator' ) ) { // if separator
2008-11-09 15:54:39 +01:00
$first = true ;
2009-04-27 07:09:50 +02:00
$c = $menu [ $lastorder ][ 4 ];
$menu [ $lastorder ][ 4 ] = add_cssclass ( 'menu-top-last' , $c );
2008-11-09 15:54:39 +01:00
continue ;
}
if ( $first ) {
$c = $menu [ $order ][ 4 ];
$menu [ $order ][ 4 ] = add_cssclass ( 'menu-top-first' , $c );
$first = false ;
}
if ( $mc == $i ) { // last item
$c = $menu [ $order ][ 4 ];
$menu [ $order ][ 4 ] = add_cssclass ( 'menu-top-last' , $c );
}
$lastorder = $order ;
}
return apply_filters ( 'add_menu_classes' , $menu );
}
2006-11-18 08:31:29 +01:00
uksort ( $menu , " strnatcasecmp " ); // make it all pretty
2004-10-18 06:50:08 +02:00
2009-04-27 07:09:50 +02:00
if ( apply_filters ( 'custom_menu_order' , false ) ) {
$menu_order = array ();
foreach ( $menu as $menu_item ) {
$menu_order [] = $menu_item [ 2 ];
}
unset ( $menu_item );
$default_menu_order = $menu_order ;
$menu_order = apply_filters ( 'menu_order' , $menu_order );
$menu_order = array_flip ( $menu_order );
$default_menu_order = array_flip ( $default_menu_order );
function sort_menu ( $a , $b ) {
global $menu_order , $default_menu_order ;
$a = $a [ 2 ];
$b = $b [ 2 ];
if ( isset ( $menu_order [ $a ]) && ! isset ( $menu_order [ $b ]) ) {
return - 1 ;
} elseif ( ! isset ( $menu_order [ $a ]) && isset ( $menu_order [ $b ]) ) {
return 1 ;
} elseif ( isset ( $menu_order [ $a ]) && isset ( $menu_order [ $b ]) ) {
if ( $menu_order [ $a ] == $menu_order [ $b ] )
return 0 ;
return ( $menu_order [ $a ] < $menu_order [ $b ]) ? - 1 : 1 ;
} else {
return ( $default_menu_order [ $a ] <= $default_menu_order [ $b ]) ? - 1 : 1 ;
}
}
usort ( $menu , 'sort_menu' );
unset ( $menu_order , $default_menu_order );
}
2008-11-09 20:20:38 +01:00
$menu = add_menu_classes ( $menu );
2010-04-10 12:48:30 +02:00
if ( ! user_can_access_admin_page () ) {
2007-12-05 08:34:57 +01:00
do_action ( 'admin_page_access_denied' );
2006-07-06 00:00:03 +02:00
wp_die ( __ ( 'You do not have sufficient permissions to access this page.' ) );
2006-11-18 08:31:29 +01:00
}
2004-10-18 06:50:08 +02:00
2010-03-10 17:06:53 +01:00
?>