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
*/
2007-02-27 16:24:54 +01:00
2017-12-01 00:11:00 +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
2017-12-01 00:11:00 +01:00
$submenu [ 'index.php' ][ 0 ] = array ( __ ( 'Home' ), 'read' , 'index.php' );
2010-11-14 19:49:18 +01:00
if ( is_multisite () ) {
2017-12-01 00:11:00 +01:00
$submenu [ 'index.php' ][ 5 ] = array ( __ ( 'My Sites' ), 'read' , 'my-sites.php' );
2011-01-04 09:36:06 +01:00
}
2016-12-07 23:14:42 +01:00
if ( ! is_multisite () || current_user_can ( 'update_core' ) ) {
2011-07-26 20:39:57 +02:00
$update_data = wp_get_update_data ();
2016-12-07 23:14:42 +01:00
}
2010-11-14 19:49:18 +01:00
2011-01-04 09:36:06 +01:00
if ( ! is_multisite () ) {
2017-08-18 20:31:44 +02:00
if ( current_user_can ( 'update_core' ) ) {
2012-06-30 14:54:05 +02:00
$cap = 'update_core' ;
2017-08-18 20:31:44 +02:00
} elseif ( current_user_can ( 'update_plugins' ) ) {
2012-06-30 14:54:05 +02:00
$cap = 'update_plugins' ;
2017-08-18 20:31:44 +02:00
} elseif ( current_user_can ( 'update_themes' ) ) {
2012-06-30 14:54:05 +02:00
$cap = 'update_themes' ;
2017-08-18 20:31:44 +02:00
} else {
$cap = 'update_languages' ;
}
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 19:13:59 +02:00
$submenu [ 'index.php' ][ 10 ] = array (
sprintf (
2019-09-03 02:41:05 +02:00
/* translators: %s: Number of pending updates. */
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 19:13:59 +02:00
__ ( 'Updates %s' ),
sprintf (
'<span class="update-plugins count-%s"><span class="update-count">%s</span></span>' ,
$update_data [ 'counts' ][ 'total' ],
number_format_i18n ( $update_data [ 'counts' ][ 'total' ] )
)
),
$cap ,
'update-core.php' ,
);
2012-06-30 14:54:05 +02:00
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
2020-01-29 01:45:18 +01:00
// $menu[5] = Posts.
2009-02-12 09:00:29 +01:00
2017-12-01 00:11:00 +01:00
$menu [ 10 ] = array ( __ ( 'Media' ), 'upload_files' , 'upload.php' , '' , 'menu-top menu-icon-media' , 'menu-media' , 'dashicons-admin-media' );
$submenu [ 'upload.php' ][ 5 ] = array ( __ ( 'Library' ), 'upload_files' , 'upload.php' );
2019-09-03 02:41:05 +02:00
/* translators: Add new file. */
2017-12-01 00:11:00 +01:00
$submenu [ 'upload.php' ][ 10 ] = array ( _x ( 'Add New' , 'file' ), 'upload_files' , 'media-new.php' );
$i = 15 ;
foreach ( get_taxonomies_for_attachments ( 'objects' ) as $tax ) {
if ( ! $tax -> show_ui || ! $tax -> show_in_menu ) {
continue ;
2012-09-22 00:52:54 +02:00
}
2017-12-01 00:11:00 +01:00
$submenu [ 'upload.php' ][ $i ++ ] = array ( esc_attr ( $tax -> labels -> menu_name ), $tax -> cap -> manage_terms , 'edit-tags.php?taxonomy=' . $tax -> name . '&post_type=attachment' );
}
2015-09-02 20:48:22 +02:00
unset ( $tax , $i );
2008-11-25 20:05:48 +01:00
2017-12-01 00:11:00 +01:00
$menu [ 15 ] = array ( __ ( 'Links' ), 'manage_links' , 'link-manager.php' , '' , 'menu-top menu-icon-links' , 'menu-links' , 'dashicons-admin-links' );
$submenu [ 'link-manager.php' ][ 5 ] = array ( _x ( 'All Links' , 'admin menu' ), 'manage_links' , 'link-manager.php' );
2019-09-03 02:41:05 +02:00
/* translators: Add new links. */
2017-12-01 00:11:00 +01:00
$submenu [ 'link-manager.php' ][ 10 ] = array ( _x ( 'Add New' , 'link' ), 'manage_links' , 'link-add.php' );
$submenu [ 'link-manager.php' ][ 15 ] = array ( __ ( 'Link Categories' ), 'manage_categories' , 'edit-tags.php?taxonomy=link_category' );
2008-11-25 20:05:48 +01:00
2020-01-29 01:45:18 +01:00
// $menu[20] = Pages.
2008-09-25 21:33:53 +02:00
2015-11-18 22:34:26 +01:00
// Avoid the comment count query for users who cannot edit_posts.
if ( current_user_can ( 'edit_posts' ) ) {
2019-03-18 16:22:53 +01:00
$awaiting_mod = wp_count_comments ();
$awaiting_mod = $awaiting_mod -> moderated ;
$awaiting_mod_i18n = number_format_i18n ( $awaiting_mod );
2019-09-03 02:41:05 +02:00
/* translators: %s: Number of comments. */
2019-03-18 16:22:53 +01:00
$awaiting_mod_text = sprintf ( _n ( '%s Comment in moderation' , '%s Comments in moderation' , $awaiting_mod ), $awaiting_mod_i18n );
$menu [ 25 ] = array (
2019-09-03 02:41:05 +02:00
/* translators: %s: Number of comments. */
2019-03-18 16:22:53 +01:00
sprintf ( __ ( 'Comments %s' ), '<span class="awaiting-mod count-' . absint ( $awaiting_mod ) . '"><span class="pending-count" aria-hidden="true">' . $awaiting_mod_i18n . '</span><span class="comments-in-moderation-text screen-reader-text">' . $awaiting_mod_text . '</span></span>' ),
2015-11-18 22:34:26 +01:00
'edit_posts' ,
'edit-comments.php' ,
'' ,
'menu-top menu-icon-comments' ,
'menu-comments' ,
'dashicons-admin-comments' ,
);
unset ( $awaiting_mod );
}
2008-09-25 21:33:53 +02:00
2017-12-01 00:11:00 +01:00
$submenu [ 'edit-comments.php' ][ 0 ] = array ( __ ( 'All Comments' ), 'edit_posts' , 'edit-comments.php' );
2011-05-11 22:09:28 +02:00
2020-01-29 01:45:18 +01:00
$_wp_last_object_menu = 25 ; // The index of the last top-level menu in the object menu group.
2008-11-05 23:46:58 +01:00
2017-12-01 00:11:00 +01:00
$types = ( array ) get_post_types (
array (
'show_ui' => true ,
'_builtin' => false ,
'show_in_menu' => true ,
)
);
2015-08-24 23:19:24 +02:00
$builtin = array ( 'post' , 'page' );
foreach ( array_merge ( $builtin , $types ) 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.
2020-02-09 17:55:09 +01:00
if ( true !== $ptype_obj -> show_in_menu ) {
2010-10-19 09:58:02 +02:00
continue ;
2017-12-01 00:11:00 +01:00
}
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.
2017-12-01 00:11:00 +01:00
$ptype_for_id = sanitize_html_class ( $ptype );
2013-12-05 07:38:09 +01:00
2015-11-09 23:00:26 +01:00
$menu_icon = 'dashicons-admin-post' ;
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 );
}
2015-08-24 23:19:24 +02:00
} elseif ( in_array ( $ptype , $builtin ) ) {
$menu_icon = 'dashicons-admin-' . $ptype ;
}
$menu_class = 'menu-top menu-icon-' . $ptype_for_id ;
2020-01-29 01:45:18 +01:00
// 'post' special case.
2015-08-24 23:19:24 +02:00
if ( 'post' === $ptype ) {
2017-12-01 00:11:00 +01:00
$menu_class .= ' open-if-no-js' ;
$ptype_file = 'edit.php' ;
$post_new_file = 'post-new.php' ;
$edit_tags_file = 'edit-tags.php?taxonomy=%s' ;
2010-04-16 05:29:34 +02:00
} else {
2017-12-01 00:11:00 +01:00
$ptype_file = " edit.php?post_type= $ptype " ;
$post_new_file = " post-new.php?post_type= $ptype " ;
2015-08-24 23:19:24 +02:00
$edit_tags_file = " edit-tags.php?taxonomy=%s&post_type= $ptype " ;
2010-04-16 05:29:34 +02:00
}
2010-04-10 12:48:30 +02:00
2015-08-24 23:19:24 +02:00
if ( in_array ( $ptype , $builtin ) ) {
$ptype_menu_id = 'menu-' . $ptype_for_id . 's' ;
} else {
$ptype_menu_id = 'menu-posts-' . $ptype_for_id ;
}
2014-07-17 11:14:16 +02:00
/*
* If $ptype_menu_position is already populated or will be populated
* by a hard - coded value below , increment the position .
*/
2017-12-01 00:11:00 +01:00
$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 ) ) {
2010-04-10 12:48:30 +02:00
$ptype_menu_position ++ ;
2017-12-01 00:11:00 +01:00
}
2010-04-10 12:48:30 +02:00
2017-12-01 00:11:00 +01:00
$menu [ $ptype_menu_position ] = array ( esc_attr ( $ptype_obj -> labels -> menu_name ), $ptype_obj -> cap -> edit_posts , $ptype_file , '' , $menu_class , $ptype_menu_id , $menu_icon );
$submenu [ $ptype_file ][ 5 ] = array ( $ptype_obj -> labels -> all_items , $ptype_obj -> cap -> edit_posts , $ptype_file );
$submenu [ $ptype_file ][ 10 ] = array ( $ptype_obj -> labels -> add_new , $ptype_obj -> cap -> create_posts , $post_new_file );
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 ) {
2017-12-01 00:11:00 +01: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 ;
2017-12-01 00:11:00 +01:00
}
2010-01-04 17:58:43 +01:00
2017-12-01 00:11:00 +01:00
$submenu [ $ptype_file ][ $i ++ ] = array ( esc_attr ( $tax -> labels -> menu_name ), $tax -> cap -> manage_terms , sprintf ( $edit_tags_file , $tax -> name ) );
2010-01-04 17:58:43 +01:00
}
}
2015-10-01 02:48:25 +02:00
unset ( $ptype , $ptype_obj , $ptype_for_id , $ptype_menu_position , $menu_icon , $i , $tax , $post_new_file );
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
2017-12-01 00:11:00 +01:00
$appearance_cap = current_user_can ( 'switch_themes' ) ? 'switch_themes' : 'edit_theme_options' ;
2013-04-22 21:33:39 +02:00
2017-12-01 00:11:00 +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' );
2014-07-08 19:15:14 +02:00
2017-12-01 00:11:00 +01:00
$customize_url = add_query_arg ( 'return' , urlencode ( remove_query_arg ( wp_removable_query_args (), wp_unslash ( $_SERVER [ 'REQUEST_URI' ] ) ) ), 'customize.php' );
2015-02-11 23:48:27 +01:00
$submenu [ 'themes.php' ][ 6 ] = array ( __ ( 'Customize' ), 'customize' , esc_url ( $customize_url ), '' , 'hide-if-no-customize' );
2014-11-20 16:29:23 +01:00
2017-12-01 00:11:00 +01:00
if ( current_theme_supports ( 'menus' ) || current_theme_supports ( 'widgets' ) ) {
$submenu [ 'themes.php' ][ 10 ] = array ( __ ( 'Menus' ), 'edit_theme_options' , 'nav-menus.php' );
}
2013-03-29 21:39:54 +01:00
2017-12-01 00:11:00 +01:00
if ( current_theme_supports ( 'custom-header' ) && current_user_can ( 'customize' ) ) {
$customize_header_url = add_query_arg ( array ( 'autofocus' => array ( 'control' => 'header_image' ) ), $customize_url );
$submenu [ 'themes.php' ][ 15 ] = array ( __ ( 'Header' ), $appearance_cap , esc_url ( $customize_header_url ), '' , 'hide-if-no-customize' );
}
2014-11-20 16:29:23 +01:00
2017-12-01 00:11:00 +01:00
if ( current_theme_supports ( 'custom-background' ) && current_user_can ( 'customize' ) ) {
$customize_background_url = add_query_arg ( array ( 'autofocus' => array ( 'control' => 'background_image' ) ), $customize_url );
$submenu [ 'themes.php' ][ 20 ] = array ( __ ( 'Background' ), $appearance_cap , esc_url ( $customize_background_url ), '' , 'hide-if-no-customize' );
}
2014-11-20 16:29:23 +01:00
unset ( $customize_url );
2013-03-29 21:39:54 +01:00
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.
2015-05-29 22:17:26 +02:00
if ( ! is_multisite () ) {
2017-12-01 00:11:00 +01:00
add_action ( 'admin_menu' , '_add_themes_utility_last' , 101 );
2015-05-29 22:17:26 +02:00
}
/**
2016-02-03 21:07:27 +01:00
* Adds the ( theme ) 'Editor' link to the bottom of the Appearance menu .
2015-05-29 22:17:26 +02:00
*
2016-02-03 21:07:27 +01:00
* @ access private
* @ since 3.0 . 0
2015-05-29 22:17:26 +02:00
*/
2010-03-04 13:23:21 +01:00
function _add_themes_utility_last () {
2020-01-29 01:45:18 +01:00
// Must use API on the admin_menu hook, direct modification is only possible on/before the _admin_menu hook.
2018-02-10 09:43:32 +01:00
add_submenu_page ( 'themes.php' , __ ( 'Theme 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' ) ) {
2017-12-01 00:11:00 +01:00
if ( ! isset ( $update_data ) ) {
2012-06-30 14:55:09 +02:00
$update_data = wp_get_update_data ();
2017-12-01 00:11:00 +01:00
}
I18N: Improve translator comments.
* Add missing translator comments.
* Fix placement of some translator comments. Translator comments should be on the line directly above the line containing the translation function call for optimal compatibility with various `.pot` file generation tools. The CS auto-fixing, which changed some inconsistent function calls to multi-line function calls, is part of the reason why this was no longer the case for a select group of translator comments.
Includes minor code layout fixes.
Polyglots, rejoice! All WordPress core files now have translator comments for all strings with placeholders!
Props jrf, subrataemfluence, GaryJ, webdados, Dency, swissspidy, alvarogois, marcomartins, mihaiiceyro, vladwtz, niq1982, flipkeijzer, michielatyoast, chandrapatel, thrijith, joshuanoyce, FesoVik, tessak22, bhaktirajdev, cleancoded, dhavalkasvala, garrett-eclipse, bibliofille, socalchristina, priyankkpatel, 5hel2l2y, adamsilverstein, JeffPaul, pierlo, SergeyBiryukov.
Fixes #44360.
Built from https://develop.svn.wordpress.org/trunk@45926
git-svn-id: http://core.svn.wordpress.org/trunk@45737 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-09-01 19:13:59 +02:00
$count = sprintf (
'<span class="update-plugins count-%s"><span class="plugin-count">%s</span></span>' ,
$update_data [ 'counts' ][ 'plugins' ],
number_format_i18n ( $update_data [ 'counts' ][ 'plugins' ] )
);
2012-06-30 14:55:09 +02:00
}
2011-06-06 18:59:24 +02:00
2019-09-03 02:41:05 +02:00
/* translators: %s: Number of pending plugin updates. */
2017-12-01 00:11:00 +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
2017-12-01 00:11:00 +01:00
$submenu [ 'plugins.php' ][ 5 ] = array ( __ ( 'Installed Plugins' ), 'activate_plugins' , 'plugins.php' );
2011-05-25 18:06:42 +02:00
2017-12-01 00:11:00 +01:00
if ( ! is_multisite () ) {
2019-09-03 02:41:05 +02:00
/* translators: Add new plugin. */
2017-12-01 00:11:00 +01:00
$submenu [ 'plugins.php' ][ 10 ] = array ( _x ( 'Add New' , 'plugin' ), 'install_plugins' , 'plugin-install.php' );
2018-02-10 09:43:32 +01:00
$submenu [ 'plugins.php' ][ 15 ] = array ( __ ( 'Plugin Editor' ), 'edit_plugins' , 'plugin-editor.php' );
2017-12-01 00:11:00 +01:00
}
2012-06-30 14:40:25 +02:00
unset ( $update_data );
2008-10-02 20:52:45 +02:00
2017-12-01 00:11:00 +01:00
if ( current_user_can ( 'list_users' ) ) {
$menu [ 70 ] = array ( __ ( 'Users' ), 'list_users' , 'users.php' , '' , 'menu-top menu-icon-users' , 'menu-users' , 'dashicons-admin-users' );
} else {
$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
2017-12-01 00:11:00 +01: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.
2017-12-01 00:11:00 +01:00
$submenu [ 'users.php' ][ 5 ] = array ( __ ( 'All Users' ), 'list_users' , 'users.php' );
2014-11-30 20:18:23 +01:00
if ( current_user_can ( 'create_users' ) ) {
2017-12-01 00:11:00 +01:00
$submenu [ 'users.php' ][ 10 ] = array ( _x ( 'Add New' , 'user' ), 'create_users' , 'user-new.php' );
2014-11-30 20:18:23 +01:00
} elseif ( is_multisite () ) {
2017-12-01 00:11:00 +01:00
$submenu [ 'users.php' ][ 10 ] = array ( _x ( 'Add New' , 'user' ), 'promote_users' , 'user-new.php' );
2014-11-30 20:18:23 +01:00
}
2010-01-15 23:11:12 +01:00
2017-12-01 00:11:00 +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' ;
2017-12-01 00:11:00 +01:00
$submenu [ 'profile.php' ][ 5 ] = array ( __ ( 'Your Profile' ), 'read' , 'profile.php' );
2014-11-30 20:18:23 +01:00
if ( current_user_can ( 'create_users' ) ) {
2017-12-01 00:11:00 +01:00
$submenu [ 'profile.php' ][ 10 ] = array ( __ ( 'Add New User' ), 'create_users' , 'user-new.php' );
2014-11-30 20:18:23 +01:00
} elseif ( is_multisite () ) {
2017-12-01 00:11:00 +01:00
$submenu [ 'profile.php' ][ 10 ] = array ( __ ( 'Add New User' ), 'promote_users' , 'user-new.php' );
2014-11-30 20:18:23 +01:00
}
2008-10-02 20:52:45 +02:00
}
2017-12-01 00:11:00 +01:00
$menu [ 75 ] = array ( __ ( 'Tools' ), 'edit_posts' , 'tools.php' , '' , 'menu-top menu-icon-tools' , 'menu-tools' , 'dashicons-admin-tools' );
$submenu [ 'tools.php' ][ 5 ] = array ( __ ( 'Available Tools' ), 'edit_posts' , 'tools.php' );
$submenu [ 'tools.php' ][ 10 ] = array ( __ ( 'Import' ), 'import' , 'import.php' );
$submenu [ 'tools.php' ][ 15 ] = array ( __ ( 'Export' ), 'export' , 'export.php' );
2019-06-10 09:42:52 +02:00
$submenu [ 'tools.php' ][ 20 ] = array ( __ ( 'Site Health' ), 'view_site_health_checks' , 'site-health.php' );
2019-05-26 22:50:53 +02:00
$submenu [ 'tools.php' ][ 25 ] = array ( __ ( 'Export Personal Data' ), 'export_others_personal_data' , 'export-personal-data.php' );
$submenu [ 'tools.php' ][ 30 ] = array ( __ ( 'Erase Personal Data' ), 'erase_others_personal_data' , 'erase-personal-data.php' );
2017-12-01 00:11:00 +01:00
if ( is_multisite () && ! is_main_site () ) {
2019-05-26 22:50:53 +02:00
$submenu [ 'tools.php' ][ 35 ] = array ( __ ( 'Delete Site' ), 'delete_site' , 'ms-delete-site.php' );
2017-12-01 00:11:00 +01:00
}
if ( ! is_multisite () && defined ( 'WP_ALLOW_MULTISITE' ) && WP_ALLOW_MULTISITE ) {
$submenu [ 'tools.php' ][ 50 ] = array ( __ ( 'Network Setup' ), 'setup_network' , 'network.php' );
}
Privacy: Un-map privacy capabilities to make them available to be assigned for custom roles:
* `erase_others_personal_data`
* `export_others_personal_data`
* `manage_privacy_options`
Previously mapped to `manage_options` or `manage_network` (on Multisite), these are now added to the Administrator role separately.
Additionally, `manage_privacy_options` is added to the Editor role.
Props garrett-eclipse, xkon, pbiron, desrosj, johnbillion, flixos90, juliobox, lakenh, Ov3rfly, ianatkins.
Fixes #44176.
Built from https://develop.svn.wordpress.org/trunk@47269
git-svn-id: http://core.svn.wordpress.org/trunk@47069 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-02-11 19:36:06 +01:00
$menu [ 80 ] = array ( __ ( 'Settings' ), 'manage_options' , 'options-general.php' , '' , 'menu-top menu-icon-settings' , 'menu-settings' , 'dashicons-admin-settings' );
if ( current_user_can ( 'manage_privacy_options' ) && ! current_user_can ( 'manage_options' ) ) {
$menu [ 80 ] = array ( __ ( 'Settings' ), 'manage_privacy_options' , 'options-privacy.php' , '' , 'menu-top menu-icon-settings' , 'menu-settings' , 'dashicons-admin-settings' );
}
2017-12-01 00:11:00 +01:00
$submenu [ 'options-general.php' ][ 10 ] = array ( _x ( 'General' , 'settings screen' ), 'manage_options' , 'options-general.php' );
$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' );
$submenu [ 'options-general.php' ][ 30 ] = array ( __ ( 'Media' ), 'manage_options' , 'options-media.php' );
$submenu [ 'options-general.php' ][ 40 ] = array ( __ ( 'Permalinks' ), 'manage_options' , 'options-permalink.php' );
2019-05-26 22:50:53 +02:00
$submenu [ 'options-general.php' ][ 45 ] = array ( __ ( 'Privacy' ), 'manage_privacy_options' , 'options-privacy.php' );
2004-09-11 18:12:40 +02:00
2020-01-29 01:45:18 +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
2020-01-29 01:45:18 +01:00
// Back-compat for old top-levels.
2017-12-01 00:11:00 +01:00
$_wp_real_parent_file [ 'post.php' ] = 'edit.php' ;
$_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' ;
2017-12-01 00:11:00 +01:00
$_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' ;
2017-12-01 00:11:00 +01:00
$_wp_real_parent_file [ 'ms-admin.php' ] = 'tools.php' ;
2008-08-22 06:32:42 +02:00
2016-05-13 20:41:31 +02:00
// Ensure backward compatibility.
2010-07-30 22:34:54 +02:00
$compat = array (
2017-12-01 00:11:00 +01:00
'index' => 'dashboard' ,
'edit' => 'posts' ,
'post' => 'posts' ,
'upload' => 'media' ,
'link-manager' => 'links' ,
'edit-pages' => 'pages' ,
'page' => 'pages' ,
'edit-comments' => 'comments' ,
2010-07-30 22:34:54 +02:00
'options-general' => 'settings' ,
2017-12-01 00:11:00 +01:00
'themes' => 'appearance' ,
);
2010-07-30 22:34:54 +02:00
2020-02-06 07:33:11 +01:00
require_once ABSPATH . 'wp-admin/includes/menu.php' ;