2003-05-28 09:54:49 +02:00
< ? php
2008-08-14 08:30:38 +02:00
/**
* Build Administration Menu .
*
* @ package WordPress
* @ subpackage Administration
*/
/**
2013-08-23 15:53:11 +02:00
* Constructs the admin menu .
2008-08-14 08:30:38 +02:00
*
* 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
2014-03-05 21:04:14 +01:00
$menu [ 2 ] = array ( __ ( 'Dashboard' ), 'read' , 'index.php' , '' , 'menu-top menu-top-first menu-icon-dashboard' , 'menu-dashboard' , 'dashicons-dashboard' );
2010-02-04 21:32:06 +01:00
2011-05-11 22:09:28 +02:00
$submenu [ 'index.php' ][ 0 ] = array ( __ ( 'Home' ), 'read' , 'index.php' );
2010-11-14 19:49:18 +01:00
if ( is_multisite () ) {
$submenu [ 'index.php' ][ 5 ] = array ( __ ( 'My Sites' ), 'read' , 'my-sites.php' );
2011-01-04 09:36:06 +01:00
}
2011-07-26 20:39:57 +02:00
if ( ! is_multisite () || is_super_admin () )
$update_data = wp_get_update_data ();
2010-11-14 19:49:18 +01:00
2011-01-04 09:36:06 +01:00
if ( ! is_multisite () ) {
2012-06-30 14:54:05 +02:00
if ( current_user_can ( 'update_core' ) )
$cap = 'update_core' ;
elseif ( current_user_can ( 'update_plugins' ) )
$cap = 'update_plugins' ;
else
$cap = 'update_themes' ;
$submenu [ 'index.php' ][ 10 ] = array ( sprintf ( __ ( 'Updates %s' ), " <span class='update-plugins count- { $update_data [ 'counts' ][ 'total' ] } ' title=' { $update_data [ 'title' ] } '><span class='update-count'> " . number_format_i18n ( $update_data [ 'counts' ][ 'total' ]) . " </span></span> " ), $cap , 'update-core.php' );
unset ( $cap );
2010-03-05 07:20:41 +01:00
}
2010-01-07 00:41:03 +01:00
2011-05-18 08:20:30 +02:00
$menu [ 4 ] = array ( '' , 'read' , 'separator1' , '' , 'wp-menu-separator' );
2008-10-14 07:10:16 +02:00
2014-03-05 21:04:14 +01:00
$menu [ 5 ] = array ( __ ( 'Posts' ), 'edit_posts' , 'edit.php' , '' , 'open-if-no-js menu-top menu-icon-post' , 'menu-posts' , 'dashicons-admin-post' );
2011-05-11 22:09:28 +02:00
$submenu [ 'edit.php' ][ 5 ] = array ( __ ( 'All Posts' ), 'edit_posts' , 'edit.php' );
2009-03-02 20:20:19 +01:00
/* translators: add new post */
2012-11-28 23:28:20 +01:00
$submenu [ 'edit.php' ][ 10 ] = array ( _x ( 'Add New' , 'post' ), get_post_type_object ( 'post' ) -> cap -> create_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 ) {
2013-08-27 00:35:10 +02:00
if ( ! $tax -> show_ui || ! $tax -> show_in_menu || ! 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
2014-03-05 21:04:14 +01:00
$menu [ 10 ] = array ( __ ( 'Media' ), 'upload_files' , 'upload.php' , '' , 'menu-top menu-icon-media' , 'menu-media' , 'dashicons-admin-media' );
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 */
2012-04-12 02:16:37 +02:00
$submenu [ 'upload.php' ][ 10 ] = array ( _x ( 'Add New' , 'file' ), 'upload_files' , 'media-new.php' );
2012-09-22 00:52:54 +02:00
foreach ( get_taxonomies_for_attachments ( 'objects' ) as $tax ) {
2013-08-27 00:35:10 +02:00
if ( ! $tax -> show_ui || ! $tax -> show_in_menu )
2012-09-22 00:52:54 +02:00
continue ;
$submenu [ 'upload.php' ][ $i ++ ] = array ( esc_attr ( $tax -> labels -> menu_name ), $tax -> cap -> manage_terms , 'edit-tags.php?taxonomy=' . $tax -> name . '&post_type=attachment' );
}
unset ( $tax );
2008-11-25 20:05:48 +01:00
2014-03-05 21:04:14 +01:00
$menu [ 15 ] = array ( __ ( 'Links' ), 'manage_links' , 'link-manager.php' , '' , 'menu-top menu-icon-links' , 'menu-links' , 'dashicons-admin-links' );
2011-11-07 18:28:20 +01:00
$submenu [ 'link-manager.php' ][ 5 ] = array ( _x ( 'All Links' , 'admin menu' ), '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
2014-03-05 21:04:14 +01:00
$menu [ 20 ] = array ( __ ( 'Pages' ), 'edit_pages' , 'edit.php?post_type=page' , '' , 'menu-top menu-icon-page' , 'menu-pages' , 'dashicons-admin-page' );
2011-05-11 22:09:28 +02:00
$submenu [ 'edit.php?post_type=page' ][ 5 ] = array ( __ ( 'All Pages' ), 'edit_pages' , 'edit.php?post_type=page' );
2009-03-02 20:20:19 +01:00
/* translators: add new page */
2012-11-28 23:28:20 +01:00
$submenu [ 'edit.php?post_type=page' ][ 10 ] = array ( _x ( 'Add New' , 'page' ), get_post_type_object ( 'page' ) -> cap -> create_posts , '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 ) {
2013-08-27 00:35:10 +02:00
if ( ! $tax -> show_ui || ! $tax -> show_in_menu || ! in_array ( 'page' , ( array ) $tax -> object_type , true ) )
2010-05-26 21:03:46 +02:00
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 ;
2014-03-05 21:04:14 +01:00
$menu [ 25 ] = array ( sprintf ( __ ( 'Comments %s' ), " <span class='awaiting-mod 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' , 'dashicons-admin-comments' );
2010-10-07 22:12:49 +02:00
unset ( $awaiting_mod );
2008-09-25 21:33:53 +02:00
2011-05-11 22:09:28 +02:00
$submenu [ 'edit-comments.php' ][ 0 ] = array ( __ ( 'All Comments' ), 'edit_posts' , 'edit-comments.php' );
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 );
2013-12-05 07:38:09 +01:00
2010-04-16 05:29:34 +02:00
if ( is_string ( $ptype_obj -> menu_icon ) ) {
2013-12-05 07:38:09 +01:00
// Special handling for data:image/svg+xml and Dashicons.
if ( 0 === strpos ( $ptype_obj -> menu_icon , 'data:image/svg+xml;base64,' ) || 0 === strpos ( $ptype_obj -> menu_icon , 'dashicons-' ) ) {
$menu_icon = $ptype_obj -> menu_icon ;
} else {
$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 {
2014-03-05 21:04:14 +01:00
$menu_icon = 'dashicons-admin-post' ;
2010-04-16 05:29:34 +02:00
$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 );
2011-05-11 22:09:28 +02:00
$submenu [ " edit.php?post_type= $ptype " ][ 5 ] = array ( $ptype_obj -> labels -> all_items , $ptype_obj -> cap -> edit_posts , " edit.php?post_type= $ptype " );
2012-11-28 19:24:11 +01:00
$submenu [ " edit.php?post_type= $ptype " ][ 10 ] = array ( $ptype_obj -> labels -> add_new , $ptype_obj -> cap -> create_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 ) {
2013-08-27 00:35:10 +02:00
if ( ! $tax -> show_ui || ! $tax -> show_in_menu || ! 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
2011-05-18 08:20:30 +02:00
$menu [ 59 ] = array ( '' , 'read' , 'separator2' , '' , 'wp-menu-separator' );
2008-10-14 07:10:16 +02:00
2013-03-29 21:39:54 +01:00
$appearance_cap = current_user_can ( 'switch_themes' ) ? 'switch_themes' : 'edit_theme_options' ;
2013-04-22 21:33:39 +02:00
2014-03-05 21:04:14 +01:00
$menu [ 60 ] = array ( __ ( 'Appearance' ), $appearance_cap , 'themes.php' , '' , 'menu-top menu-icon-appearance' , 'menu-appearance' , 'dashicons-admin-appearance' );
2013-04-22 21:33:39 +02:00
$submenu [ 'themes.php' ][ 5 ] = array ( __ ( 'Themes' ), $appearance_cap , 'themes.php' );
2013-04-22 21:37:26 +02:00
$submenu [ 'themes.php' ][ 6 ] = array ( __ ( 'Customize' ), 'edit_theme_options' , 'customize.php' , 'hide-if-no-customize' );
2013-03-29 21:39:54 +01:00
if ( current_theme_supports ( 'menus' ) || current_theme_supports ( 'widgets' ) )
$submenu [ 'themes.php' ][ 10 ] = array ( __ ( 'Menus' ), 'edit_theme_options' , 'nav-menus.php' );
unset ( $appearance_cap );
2010-03-04 13:23:21 +01:00
2011-09-03 16:18:10 +02:00
// Add 'Editor' to the bottom of the Appearance 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
2012-06-30 14:55:09 +02:00
$count = '' ;
if ( ! is_multisite () && current_user_can ( 'update_plugins' ) ) {
if ( ! isset ( $update_data ) )
$update_data = wp_get_update_data ();
$count = " <span class='update-plugins count- { $update_data [ 'counts' ][ 'plugins' ] } '><span class='plugin-count'> " . number_format_i18n ( $update_data [ 'counts' ][ 'plugins' ]) . " </span></span> " ;
}
2011-06-06 18:59:24 +02:00
2014-03-05 21:04:14 +01:00
$menu [ 65 ] = array ( sprintf ( __ ( 'Plugins %s' ), $count ), 'activate_plugins' , 'plugins.php' , '' , 'menu-top menu-icon-plugins' , 'menu-plugins' , 'dashicons-admin-plugins' );
2011-06-11 01:01:45 +02:00
2012-06-30 14:55:09 +02:00
$submenu [ 'plugins.php' ][ 5 ] = array ( __ ( 'Installed Plugins' ), 'activate_plugins' , 'plugins.php' );
2011-05-25 18:06:42 +02:00
2012-06-30 14:55:09 +02:00
if ( ! is_multisite () ) {
/* translators: add new plugin */
$submenu [ 'plugins.php' ][ 10 ] = array ( _x ( 'Add New' , 'plugin' ), 'install_plugins' , 'plugin-install.php' );
$submenu [ 'plugins.php' ][ 15 ] = array ( _x ( 'Editor' , 'plugin editor' ), 'edit_plugins' , 'plugin-editor.php' );
}
2012-06-30 14:40:25 +02:00
unset ( $update_data );
2008-10-02 20:52:45 +02:00
2010-04-22 21:48:13 +02:00
if ( current_user_can ( 'list_users' ) )
2014-03-05 21:04:14 +01:00
$menu [ 70 ] = array ( __ ( 'Users' ), 'list_users' , 'users.php' , '' , 'menu-top menu-icon-users' , 'menu-users' , 'dashicons-admin-users' );
2008-10-02 20:52:45 +02:00
else
2014-03-05 21:04:14 +01:00
$menu [ 70 ] = array ( __ ( 'Profile' ), 'read' , 'profile.php' , '' , 'menu-top menu-icon-users' , 'menu-users' , 'dashicons-admin-users' );
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.
2011-05-11 22:09:28 +02:00
$submenu [ 'users.php' ][ 5 ] = array ( __ ( 'All Users' ), 'list_users' , 'users.php' );
2011-02-09 18:30:26 +01:00
if ( current_user_can ( 'create_users' ) )
$submenu [ 'users.php' ][ 10 ] = array ( _x ( 'Add New' , 'user' ), 'create_users' , 'user-new.php' );
else
$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' );
2011-02-09 18:30:26 +01:00
if ( current_user_can ( 'create_users' ) )
$submenu [ 'profile.php' ][ 10 ] = array ( __ ( 'Add New User' ), 'create_users' , 'user-new.php' );
else
$submenu [ 'profile.php' ][ 10 ] = array ( __ ( 'Add New User' ), 'promote_users' , 'user-new.php' );
2008-10-02 20:52:45 +02:00
}
2014-03-05 21:04:14 +01:00
$menu [ 75 ] = array ( __ ( 'Tools' ), 'edit_posts' , 'tools.php' , '' , 'menu-top menu-icon-tools' , 'menu-tools' , 'dashicons-admin-tools' );
2011-05-24 23:58:01 +02:00
$submenu [ 'tools.php' ][ 5 ] = array ( __ ( 'Available Tools' ), 'edit_posts' , 'tools.php' );
2008-11-27 22:11:25 +01:00
$submenu [ 'tools.php' ][ 10 ] = array ( __ ( 'Import' ), 'import' , 'import.php' );
2011-05-16 12:44:42 +02:00
$submenu [ 'tools.php' ][ 15 ] = array ( __ ( 'Export' ), 'export' , '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' );
2011-01-11 22:00:23 +01:00
if ( ! is_multisite () && defined ( 'WP_ALLOW_MULTISITE' ) && WP_ALLOW_MULTISITE )
2011-05-24 23:58:01 +02:00
$submenu [ 'tools.php' ][ 50 ] = array ( __ ( 'Network Setup' ), 'manage_options' , 'network.php' );
2008-10-02 20:52:45 +02:00
2014-03-05 21:04:14 +01:00
$menu [ 80 ] = array ( __ ( 'Settings' ), 'manage_options' , 'options-general.php' , '' , 'menu-top menu-icon-settings' , 'menu-settings' , 'dashicons-admin-settings' );
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' ][ 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
2011-06-01 16:41:43 +02:00
$menu [ 99 ] = array ( '' , 'read' , 'separator-last' , '' , 'wp-menu-separator' );
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' );