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
2010-07-30 22:34:54 +02: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-11-14 19:49:18 +01:00
$submenu [ 'index.php' ][ 0 ] = array ( __ ( 'Dashboard' ), 'read' , 'index.php' );
if ( is_multisite () ) {
$submenu [ 'index.php' ][ 5 ] = array ( __ ( 'My Sites' ), 'read' , 'my-sites.php' );
} else {
$plugin_update_count = $theme_update_count = $wordpress_update_count = 0 ;
$update_plugins = get_site_transient ( 'update_plugins' );
if ( ! empty ( $update_plugins -> response ) )
$plugin_update_count = count ( $update_plugins -> response );
$update_themes = get_site_transient ( 'update_themes' );
if ( ! empty ( $update_themes -> response ) )
$theme_update_count = count ( $update_themes -> response );
$update_wordpress = get_core_updates ( array ( 'dismissed' => false ) );
if ( ! empty ( $update_wordpress ) && ! in_array ( $update_wordpress [ 0 ] -> response , array ( 'development' , 'latest' ) ) )
$wordpress_update_count = 1 ;
$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 );
$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 , $update_themes , $update_plugins , $update_wordpress );
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' );
2010-05-24 23:09:55 +02:00
$submenu [ 'edit.php' ][ 5 ] = array ( __ ( 'Posts' ), '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 ;
2010-12-02 22:32:19 +01:00
foreach ( get_taxonomies ( array (), 'objects' ) 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-11-09 03:09:00 +01:00
$submenu [ 'edit.php' ][ $i ++ ] = array ( esc_attr ( $tax -> labels -> menu_name ), $tax -> cap -> manage_terms , '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' );
2010-05-24 23:09:55 +02:00
$submenu [ 'link-manager.php' ][ 5 ] = array ( __ ( 'Links' ), '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' );
2010-08-11 23:54:51 +02:00
$submenu [ 'link-manager.php' ][ 15 ] = array ( __ ( 'Link Categories' ), 'manage_categories' , 'edit-tags.php?taxonomy=link_category' );
2008-11-25 20:05:48 +01:00
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-05-24 23:09:55 +02:00
$submenu [ 'edit.php?post_type=page' ][ 5 ] = array ( __ ( 'Pages' ), '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' );
2010-05-26 21:03:46 +02:00
$i = 15 ;
2010-12-02 22:32:19 +01:00
foreach ( get_taxonomies ( array (), 'objects' ) as $tax ) {
2010-05-26 21:03:46 +02:00
if ( ! $tax -> show_ui || ! in_array ( 'page' , ( array ) $tax -> object_type , true ) )
continue ;
2010-11-09 03:09:00 +01:00
$submenu [ 'edit.php?post_type=page' ][ $i ++ ] = array ( esc_attr ( $tax -> labels -> menu_name ), $tax -> cap -> manage_terms , 'edit-tags.php?taxonomy=' . $tax -> name . '&post_type=page' );
2010-05-26 21:03:46 +02:00
}
unset ( $tax );
2008-09-25 21:33:53 +02:00
2010-10-07 22:12:49 +02:00
$awaiting_mod = wp_count_comments ();
$awaiting_mod = $awaiting_mod -> moderated ;
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' );
2010-10-07 22:12:49 +02:00
unset ( $awaiting_mod );
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-10-19 09:58:02 +02:00
foreach ( ( array ) get_post_types ( array ( 'show_ui' => true , '_builtin' => false , 'show_in_menu' => true ) ) as $ptype ) {
2010-04-16 05:29:34 +02:00
$ptype_obj = get_post_type_object ( $ptype );
2010-10-19 09:58:02 +02:00
// Check if it should be a submenu.
if ( $ptype_obj -> show_in_menu !== true )
continue ;
2010-06-27 06:21:33 +02:00
$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.
2010-05-15 07:38:40 +02:00
$ptype_for_id = sanitize_html_class ( $ptype );
2010-04-16 05:29:34 +02:00
if ( is_string ( $ptype_obj -> menu_icon ) ) {
$menu_icon = esc_url ( $ptype_obj -> menu_icon );
2010-05-15 07:38:40 +02:00
$ptype_class = $ptype_for_id ;
2010-04-16 05:29:34 +02:00
} 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-11-09 03:09:00 +01:00
$menu [ $ptype_menu_position ] = array ( esc_attr ( $ptype_obj -> labels -> menu_name ), $ptype_obj -> cap -> edit_posts , " edit.php?post_type= $ptype " , '' , 'menu-top menu-icon-' . $ptype_class , 'menu-posts-' . $ptype_for_id , $menu_icon );
$submenu [ " edit.php?post_type= $ptype " ][ 5 ] = array ( $ptype_obj -> labels -> menu_name , $ptype_obj -> cap -> edit_posts , " edit.php?post_type= $ptype " );
2010-05-12 22:45:18 +02:00
$submenu [ " edit.php?post_type= $ptype " ][ 10 ] = array ( $ptype_obj -> labels -> add_new , $ptype_obj -> cap -> edit_posts , " post-new.php?post_type= $ptype " );
2010-01-04 17:58:43 +01:00
$i = 15 ;
2010-12-02 22:32:19 +01:00
foreach ( get_taxonomies ( array (), 'objects' ) 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-11-09 03:09:00 +01:00
$submenu [ " edit.php?post_type= $ptype " ][ $i ++ ] = array ( esc_attr ( $tax -> labels -> menu_name ), $tax -> cap -> manage_terms , " edit-tags.php?taxonomy= $tax->name &post_type= $ptype " );
2010-01-04 17:58:43 +01:00
}
}
2010-11-09 04:28:09 +01:00
unset ( $ptype , $ptype_obj , $ptype_class , $ptype_for_id , $ptype_menu_position , $menu_icon , $i , $tax );
2010-01-04 17:58:43 +01:00
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-05-12 21:19:57 +02:00
if ( current_user_can ( 'switch_themes' ) ) {
$menu [ 60 ] = array ( __ ( 'Appearance' ), 'switch_themes' , 'themes.php' , '' , 'menu-top menu-icon-appearance' , 'menu-appearance' , 'div' );
$submenu [ 'themes.php' ][ 5 ] = array ( __ ( 'Themes' ), 'switch_themes' , 'themes.php' );
2010-06-10 19:57:30 +02:00
if ( current_theme_supports ( 'menus' ) || current_theme_supports ( 'widgets' ) )
2010-05-24 11:23:56 +02:00
$submenu [ 'themes.php' ][ 10 ] = array ( __ ( 'Menus' ), 'edit_theme_options' , 'nav-menus.php' );
2010-05-12 21:19:57 +02:00
} else {
$menu [ 60 ] = array ( __ ( 'Appearance' ), 'edit_theme_options' , 'themes.php' , '' , 'menu-top menu-icon-appearance' , 'menu-appearance' , 'div' );
$submenu [ 'themes.php' ][ 5 ] = array ( __ ( 'Themes' ), 'edit_theme_options' , 'themes.php' );
2010-06-10 19:57:30 +02:00
if ( current_theme_supports ( 'menus' ) || current_theme_supports ( 'widgets' ) )
2010-05-24 11:23:56 +02:00
$submenu [ 'themes.php' ][ 10 ] = array ( __ ( 'Menus' ), 'edit_theme_options' , 'nav-menus.php' );
2010-05-12 21:19:57 +02:00
}
2010-03-04 13:23:21 +01:00
2010-03-04 13:25:38 +01:00
// Add 'Editor' to the bottom of the Appearence menu.
2010-12-06 16:41:19 +01:00
if ( ! is_multisite () )
add_action ( 'admin_menu' , '_add_themes_utility_last' , 101 );
2010-03-04 13:23:21 +01:00
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-10-28 10:38:02 +02:00
$count = " <span class='update-plugins count- $update_count '><span class='plugin-count'> " . number_format_i18n ( $update_count ) . " </span></span> " ;
if ( is_multisite () )
$count = '' ;
$menu [ 65 ] = array ( sprintf ( __ ( 'Plugins %s' ), $count ), 'activate_plugins' , 'plugins.php' , '' , 'menu-top menu-icon-plugins' , 'menu-plugins' , 'div' );
2010-05-24 23:09:55 +02:00
$submenu [ 'plugins.php' ][ 5 ] = array ( __ ( 'Plugins' ), '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-12-06 16:41:19 +01:00
if ( ! is_multisite () )
$submenu [ 'plugins.php' ][ 15 ] = array ( _x ( 'Editor' , 'plugin editor' ), 'edit_plugins' , 'plugin-editor.php' );
2010-01-07 01:17:13 +01:00
}
2010-04-29 18:38:12 +02:00
unset ( $menu_perms , $update_plugins , $update_count );
2008-10-02 20:52:45 +02:00
2010-04-22 21:48:13 +02:00
if ( current_user_can ( 'list_users' ) )
$menu [ 70 ] = array ( __ ( 'Users' ), 'list_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
2010-04-22 21:48:13 +02:00
if ( current_user_can ( 'list_users' ) ) {
2008-10-02 20:52:45 +02:00
$_wp_real_parent_file [ 'profile.php' ] = 'users.php' ; // Back-compat for plugins adding submenus to profile.php.
2010-05-24 23:09:55 +02:00
$submenu [ 'users.php' ][ 5 ] = array ( __ ( 'Users' ), 'list_users' , 'users.php' );
2010-11-11 15:29:15 +01:00
$submenu [ 'users.php' ][ 10 ] = array ( _x ( 'Add New' , 'user' ), 'promote_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-11-11 15:29:15 +01:00
$submenu [ 'profile.php' ][ 10 ] = array ( __ ( 'Add New User' ), 'promote_users' , 'user-new.php' );
2008-10-02 20:52:45 +02:00
}
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-11-18 06:24:13 +01:00
if ( ! is_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-11-09 20:23:42 +01:00
$_wp_real_parent_file [ 'wpmu-admin.php' ] = 'tools.php' ;
$_wp_real_parent_file [ 'ms-admin.php' ] = 'tools.php' ;
2008-08-22 06:32:42 +02:00
2010-07-30 22:34:54 +02:00
// ensure we're backwards compatible
$compat = array (
'index' => 'dashboard' ,
'edit' => 'posts' ,
'post' => 'posts' ,
'upload' => 'media' ,
'link-manager' => 'links' ,
'edit-pages' => 'pages' ,
'page' => 'pages' ,
'edit-comments' => 'comments' ,
'options-general' => 'settings' ,
'themes' => 'appearance' ,
);
2010-10-07 21:34:18 +02:00
require_once ( ABSPATH . 'wp-admin/includes/menu.php' );
2004-10-18 06:50:08 +02:00
2010-03-10 17:06:53 +01:00
?>