2003-05-28 03:54:49 -04:00
< ? php
2008-08-14 02:30:38 -04:00
/**
* Build Administration Menu .
*
* @ package WordPress
* @ subpackage Administration
*/
/**
2013-08-23 09:53:11 -04:00
* Constructs the admin menu .
2008-08-14 02:30:38 -04: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 01:10:16 -04:00
* 3 : Class
2008-10-23 18:19:19 -04:00
* 4 : ID
2008-12-09 13:03:31 -05:00
* 5 : Icon for top level menu
2008-08-14 02:30:38 -04:00
*
* @ global array $menu
*/
2007-02-27 10:24:54 -05:00
2017-11-30 18:11:00 -05:00
$menu [ 2 ] = array ( __ ( 'Dashboard' ), 'read' , 'index.php' , '' , 'menu-top menu-top-first menu-icon-dashboard' , 'menu-dashboard' , 'dashicons-dashboard' );
2010-02-04 15:32:06 -05:00
2017-11-30 18:11:00 -05:00
$submenu [ 'index.php' ][ 0 ] = array ( __ ( 'Home' ), 'read' , 'index.php' );
2010-11-14 13:49:18 -05:00
if ( is_multisite () ) {
2017-11-30 18:11:00 -05:00
$submenu [ 'index.php' ][ 5 ] = array ( __ ( 'My Sites' ), 'read' , 'my-sites.php' );
2011-01-04 03:36:06 -05:00
}
2016-12-07 17:14:42 -05:00
if ( ! is_multisite () || current_user_can ( 'update_core' ) ) {
2011-07-26 14:39:57 -04:00
$update_data = wp_get_update_data ();
2016-12-07 17:14:42 -05:00
}
2010-11-14 13:49:18 -05:00
2011-01-04 03:36:06 -05:00
if ( ! is_multisite () ) {
2017-08-18 14:31:44 -04:00
if ( current_user_can ( 'update_core' ) ) {
2012-06-30 08:54:05 -04:00
$cap = 'update_core' ;
2017-08-18 14:31:44 -04:00
} elseif ( current_user_can ( 'update_plugins' ) ) {
2012-06-30 08:54:05 -04:00
$cap = 'update_plugins' ;
2017-08-18 14:31:44 -04:00
} elseif ( current_user_can ( 'update_themes' ) ) {
2012-06-30 08:54:05 -04:00
$cap = 'update_themes' ;
2017-08-18 14:31:44 -04:00
} else {
$cap = 'update_languages' ;
}
2017-11-30 18:11:00 -05:00
$submenu [ 'index.php' ][ 10 ] = array ( sprintf ( __ ( 'Updates %s' ), " <span class='update-plugins count- { $update_data [ 'counts' ][ 'total' ] } '><span class='update-count'> " . number_format_i18n ( $update_data [ 'counts' ][ 'total' ] ) . '</span></span>' ), $cap , 'update-core.php' );
2012-06-30 08:54:05 -04:00
unset ( $cap );
2010-03-05 01:20:41 -05:00
}
2010-01-06 18:41:03 -05:00
2011-05-18 02:20:30 -04:00
$menu [ 4 ] = array ( '' , 'read' , 'separator1' , '' , 'wp-menu-separator' );
2008-10-14 01:10:16 -04:00
2015-08-24 17:19:24 -04:00
// $menu[5] = Posts
2009-02-12 03:00:29 -05:00
2017-11-30 18:11:00 -05: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' );
2009-03-02 14:20:19 -05:00
/* translators: add new file */
2017-11-30 18:11:00 -05: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-21 18:52:54 -04:00
}
2017-11-30 18:11:00 -05: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 14:48:22 -04:00
unset ( $tax , $i );
2008-11-25 14:05:48 -05:00
2017-11-30 18:11:00 -05: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' );
2009-03-02 14:20:19 -05:00
/* translators: add new links */
2017-11-30 18:11:00 -05: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 14:05:48 -05:00
2015-08-24 17:19:24 -04:00
// $menu[20] = Pages
2008-09-25 15:33:53 -04:00
2015-11-18 16:34:26 -05:00
// Avoid the comment count query for users who cannot edit_posts.
if ( current_user_can ( 'edit_posts' ) ) {
$awaiting_mod = wp_count_comments ();
$awaiting_mod = $awaiting_mod -> moderated ;
2017-11-30 18:11:00 -05:00
$menu [ 25 ] = array (
2015-11-18 16:34:26 -05:00
sprintf ( __ ( 'Comments %s' ), '<span class="awaiting-mod count-' . absint ( $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' ,
);
unset ( $awaiting_mod );
}
2008-09-25 15:33:53 -04:00
2017-11-30 18:11:00 -05:00
$submenu [ 'edit-comments.php' ][ 0 ] = array ( __ ( 'All Comments' ), 'edit_posts' , 'edit-comments.php' );
2011-05-11 16:09:28 -04:00
2008-11-05 17:46:58 -05:00
$_wp_last_object_menu = 25 ; // The index of the last top-level menu in the object menu group
2017-11-30 18:11:00 -05:00
$types = ( array ) get_post_types (
array (
'show_ui' => true ,
'_builtin' => false ,
'show_in_menu' => true ,
)
);
2015-08-24 17:19:24 -04:00
$builtin = array ( 'post' , 'page' );
foreach ( array_merge ( $builtin , $types ) as $ptype ) {
2010-04-15 23:29:34 -04:00
$ptype_obj = get_post_type_object ( $ptype );
2010-10-19 03:58:02 -04:00
// Check if it should be a submenu.
2017-11-30 18:11:00 -05:00
if ( $ptype_obj -> show_in_menu !== true ) {
2010-10-19 03:58:02 -04:00
continue ;
2017-11-30 18:11:00 -05:00
}
2010-06-27 00:21:33 -04: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-11-30 18:11:00 -05:00
$ptype_for_id = sanitize_html_class ( $ptype );
2013-12-05 01:38:09 -05:00
2015-11-09 17:00:26 -05:00
$menu_icon = 'dashicons-admin-post' ;
2010-04-15 23:29:34 -04:00
if ( is_string ( $ptype_obj -> menu_icon ) ) {
2013-12-05 01:38:09 -05: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 17:19:24 -04:00
} elseif ( in_array ( $ptype , $builtin ) ) {
$menu_icon = 'dashicons-admin-' . $ptype ;
}
$menu_class = 'menu-top menu-icon-' . $ptype_for_id ;
// 'post' special case
if ( 'post' === $ptype ) {
2017-11-30 18:11:00 -05: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-15 23:29:34 -04:00
} else {
2017-11-30 18:11:00 -05:00
$ptype_file = " edit.php?post_type= $ptype " ;
$post_new_file = " post-new.php?post_type= $ptype " ;
2015-08-24 17:19:24 -04:00
$edit_tags_file = " edit-tags.php?taxonomy=%s&post_type= $ptype " ;
2010-04-15 23:29:34 -04:00
}
2010-04-10 06:48:30 -04:00
2015-08-24 17:19:24 -04: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 05:14:16 -04:00
/*
* If $ptype_menu_position is already populated or will be populated
* by a hard - coded value below , increment the position .
*/
2017-11-30 18:11:00 -05: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 06:48:30 -04:00
$ptype_menu_position ++ ;
2017-11-30 18:11:00 -05:00
}
2010-04-10 06:48:30 -04:00
2017-11-30 18:11:00 -05: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 11:58:43 -05:00
$i = 15 ;
2010-12-02 16:32:19 -05:00
foreach ( get_taxonomies ( array (), 'objects' ) as $tax ) {
2017-11-30 18:11:00 -05:00
if ( ! $tax -> show_ui || ! $tax -> show_in_menu || ! in_array ( $ptype , ( array ) $tax -> object_type , true ) ) {
2010-01-04 11:58:43 -05:00
continue ;
2017-11-30 18:11:00 -05:00
}
2010-01-04 11:58:43 -05:00
2017-11-30 18:11:00 -05: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 11:58:43 -05:00
}
}
2015-09-30 20:48:25 -04:00
unset ( $ptype , $ptype_obj , $ptype_for_id , $ptype_menu_position , $menu_icon , $i , $tax , $post_new_file );
2010-01-04 11:58:43 -05:00
2011-05-18 02:20:30 -04:00
$menu [ 59 ] = array ( '' , 'read' , 'separator2' , '' , 'wp-menu-separator' );
2008-10-14 01:10:16 -04:00
2017-11-30 18:11:00 -05:00
$appearance_cap = current_user_can ( 'switch_themes' ) ? 'switch_themes' : 'edit_theme_options' ;
2013-04-22 15:33:39 -04:00
2017-11-30 18:11:00 -05:00
$menu [ 60 ] = array ( __ ( 'Appearance' ), $appearance_cap , 'themes.php' , '' , 'menu-top menu-icon-appearance' , 'menu-appearance' , 'dashicons-admin-appearance' );
2013-04-22 15:33:39 -04:00
$submenu [ 'themes.php' ][ 5 ] = array ( __ ( 'Themes' ), $appearance_cap , 'themes.php' );
2014-07-08 13:15:14 -04:00
2017-11-30 18:11:00 -05: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 17:48:27 -05:00
$submenu [ 'themes.php' ][ 6 ] = array ( __ ( 'Customize' ), 'customize' , esc_url ( $customize_url ), '' , 'hide-if-no-customize' );
2014-11-20 10:29:23 -05:00
2017-11-30 18:11:00 -05: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 16:39:54 -04:00
2017-11-30 18:11:00 -05: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 10:29:23 -05:00
2017-11-30 18:11:00 -05: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 10:29:23 -05:00
unset ( $customize_url );
2013-03-29 16:39:54 -04:00
unset ( $appearance_cap );
2010-03-04 07:23:21 -05:00
2011-09-03 10:18:10 -04:00
// Add 'Editor' to the bottom of the Appearance menu.
2015-05-29 16:17:26 -04:00
if ( ! is_multisite () ) {
2017-11-30 18:11:00 -05:00
add_action ( 'admin_menu' , '_add_themes_utility_last' , 101 );
2015-05-29 16:17:26 -04:00
}
/**
2016-02-03 15:07:27 -05:00
* Adds the ( theme ) 'Editor' link to the bottom of the Appearance menu .
2015-05-29 16:17:26 -04:00
*
2016-02-03 15:07:27 -05:00
* @ access private
* @ since 3.0 . 0
2015-05-29 16:17:26 -04:00
*/
2010-03-04 07:23:21 -05:00
function _add_themes_utility_last () {
2010-03-20 21:01:45 -04:00
// Must use API on the admin_menu hook, direct modification is only possible on/before the _admin_menu hook
2018-02-10 03:43:32 -05:00
add_submenu_page ( 'themes.php' , __ ( 'Theme Editor' ), __ ( 'Theme Editor' ), 'edit_themes' , 'theme-editor.php' );
2010-03-04 07:23:21 -05:00
}
2008-09-25 15:33:53 -04:00
2012-06-30 08:55:09 -04:00
$count = '' ;
if ( ! is_multisite () && current_user_can ( 'update_plugins' ) ) {
2017-11-30 18:11:00 -05:00
if ( ! isset ( $update_data ) ) {
2012-06-30 08:55:09 -04:00
$update_data = wp_get_update_data ();
2017-11-30 18:11:00 -05:00
}
$count = " <span class='update-plugins count- { $update_data [ 'counts' ][ 'plugins' ] } '><span class='plugin-count'> " . number_format_i18n ( $update_data [ 'counts' ][ 'plugins' ] ) . '</span></span>' ;
2012-06-30 08:55:09 -04:00
}
2011-06-06 12:59:24 -04:00
2017-11-30 18:11:00 -05:00
$menu [ 65 ] = array ( sprintf ( __ ( 'Plugins %s' ), $count ), 'activate_plugins' , 'plugins.php' , '' , 'menu-top menu-icon-plugins' , 'menu-plugins' , 'dashicons-admin-plugins' );
2011-06-10 19:01:45 -04:00
2017-11-30 18:11:00 -05:00
$submenu [ 'plugins.php' ][ 5 ] = array ( __ ( 'Installed Plugins' ), 'activate_plugins' , 'plugins.php' );
2011-05-25 12:06:42 -04:00
2017-11-30 18:11:00 -05:00
if ( ! is_multisite () ) {
/* translators: add new plugin */
$submenu [ 'plugins.php' ][ 10 ] = array ( _x ( 'Add New' , 'plugin' ), 'install_plugins' , 'plugin-install.php' );
2018-02-10 03:43:32 -05:00
$submenu [ 'plugins.php' ][ 15 ] = array ( __ ( 'Plugin Editor' ), 'edit_plugins' , 'plugin-editor.php' );
2017-11-30 18:11:00 -05:00
}
2012-06-30 08:40:25 -04:00
unset ( $update_data );
2008-10-02 14:52:45 -04:00
2017-11-30 18:11:00 -05: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 14:52:45 -04:00
2017-11-30 18:11:00 -05:00
if ( current_user_can ( 'list_users' ) ) {
2008-10-02 14:52:45 -04:00
$_wp_real_parent_file [ 'profile.php' ] = 'users.php' ; // Back-compat for plugins adding submenus to profile.php.
2017-11-30 18:11:00 -05:00
$submenu [ 'users.php' ][ 5 ] = array ( __ ( 'All Users' ), 'list_users' , 'users.php' );
2014-11-30 14:18:23 -05:00
if ( current_user_can ( 'create_users' ) ) {
2017-11-30 18:11:00 -05:00
$submenu [ 'users.php' ][ 10 ] = array ( _x ( 'Add New' , 'user' ), 'create_users' , 'user-new.php' );
2014-11-30 14:18:23 -05:00
} elseif ( is_multisite () ) {
2017-11-30 18:11:00 -05:00
$submenu [ 'users.php' ][ 10 ] = array ( _x ( 'Add New' , 'user' ), 'promote_users' , 'user-new.php' );
2014-11-30 14:18:23 -05:00
}
2010-01-15 17:11:12 -05:00
2017-11-30 18:11:00 -05:00
$submenu [ 'users.php' ][ 15 ] = array ( __ ( 'Your Profile' ), 'read' , 'profile.php' );
2008-10-02 14:52:45 -04:00
} else {
$_wp_real_parent_file [ 'users.php' ] = 'profile.php' ;
2017-11-30 18:11:00 -05:00
$submenu [ 'profile.php' ][ 5 ] = array ( __ ( 'Your Profile' ), 'read' , 'profile.php' );
2014-11-30 14:18:23 -05:00
if ( current_user_can ( 'create_users' ) ) {
2017-11-30 18:11:00 -05:00
$submenu [ 'profile.php' ][ 10 ] = array ( __ ( 'Add New User' ), 'create_users' , 'user-new.php' );
2014-11-30 14:18:23 -05:00
} elseif ( is_multisite () ) {
2017-11-30 18:11:00 -05:00
$submenu [ 'profile.php' ][ 10 ] = array ( __ ( 'Add New User' ), 'promote_users' , 'user-new.php' );
2014-11-30 14:18:23 -05:00
}
2008-10-02 14:52:45 -04:00
}
2017-11-30 18:11:00 -05: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' );
if ( is_multisite () && ! is_main_site () ) {
$submenu [ 'tools.php' ][ 25 ] = array ( __ ( 'Delete Site' ), 'delete_site' , 'ms-delete-site.php' );
}
if ( ! is_multisite () && defined ( 'WP_ALLOW_MULTISITE' ) && WP_ALLOW_MULTISITE ) {
$submenu [ 'tools.php' ][ 50 ] = array ( __ ( 'Network Setup' ), 'setup_network' , 'network.php' );
}
Privacy: Replace intrusive policy update notice with menu bubbles.
Previously, when a plugin updated its suggested privacy policy text, an admin notice was shown on all screens in the Administration Panels. That was done in order to make sure that administrators were aware of it, so that they could update their policy if needed. That was a very heavy-handed and intrusive approach, though, which leads to a poor user experience, and notice fatigue.
An alternative approach is to use bubble notifications in the menu, similar to when plugins have updates that need to be installed. That still makes it obvious that something needs the administrator's attention, but is not as distracting as a notice.
The notice will still appear on the Privacy page, though, since it is relevant to that screen, and provides an explanation of why the bubble is appearing.
Props azaozz, xkon, iandunn.
Fixes #43954. See #43953.
Built from https://develop.svn.wordpress.org/trunk@43223
git-svn-id: http://core.svn.wordpress.org/trunk@43052 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-05-10 15:52:21 -04:00
$change_notice = '' ;
if ( current_user_can ( 'manage_privacy_options' ) && WP_Privacy_Policy_Content :: text_change_check () ) {
$change_notice = ' <span class="update-plugins 1"><span class="plugin-count">' . number_format_i18n ( 1 ) . '</span></span>' ;
}
// translators: %s is the update notification bubble, if updates are available.
$menu [ 80 ] = array ( sprintf ( __ ( 'Settings %s' ), $change_notice ), 'manage_options' , 'options-general.php' , '' , 'menu-top menu-icon-settings' , 'menu-settings' , 'dashicons-admin-settings' );
2017-11-30 18:11:00 -05: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' );
Privacy: Replace intrusive policy update notice with menu bubbles.
Previously, when a plugin updated its suggested privacy policy text, an admin notice was shown on all screens in the Administration Panels. That was done in order to make sure that administrators were aware of it, so that they could update their policy if needed. That was a very heavy-handed and intrusive approach, though, which leads to a poor user experience, and notice fatigue.
An alternative approach is to use bubble notifications in the menu, similar to when plugins have updates that need to be installed. That still makes it obvious that something needs the administrator's attention, but is not as distracting as a notice.
The notice will still appear on the Privacy page, though, since it is relevant to that screen, and provides an explanation of why the bubble is appearing.
Props azaozz, xkon, iandunn.
Fixes #43954. See #43953.
Built from https://develop.svn.wordpress.org/trunk@43223
git-svn-id: http://core.svn.wordpress.org/trunk@43052 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2018-05-10 15:52:21 -04:00
// translators: %s is the update notification bubble, if updates are available.
$submenu [ 'options-general.php' ][ 45 ] = array ( sprintf ( __ ( 'Privacy %s' ), $change_notice ), 'manage_privacy_options' , 'privacy.php' );
2004-09-11 12:12:40 -04:00
2009-02-13 17:57:02 -05:00
$_wp_last_utility_menu = 80 ; // The index of the last top-level menu in the utility menu group
2008-11-28 14:34:49 -05:00
2011-06-01 10:41:43 -04:00
$menu [ 99 ] = array ( '' , 'read' , 'separator-last' , '' , 'wp-menu-separator' );
2008-10-15 02:54:25 -04:00
2008-08-22 00:32:42 -04:00
// Back-compat for old top-levels
2017-11-30 18:11:00 -05:00
$_wp_real_parent_file [ 'post.php' ] = 'edit.php' ;
$_wp_real_parent_file [ 'post-new.php' ] = 'edit.php' ;
2010-02-04 17:09:35 -05:00
$_wp_real_parent_file [ 'edit-pages.php' ] = 'edit.php?post_type=page' ;
2017-11-30 18:11:00 -05:00
$_wp_real_parent_file [ 'page-new.php' ] = 'edit.php?post_type=page' ;
2010-11-09 14:23:42 -05:00
$_wp_real_parent_file [ 'wpmu-admin.php' ] = 'tools.php' ;
2017-11-30 18:11:00 -05:00
$_wp_real_parent_file [ 'ms-admin.php' ] = 'tools.php' ;
2008-08-22 00:32:42 -04:00
2016-05-13 14:41:31 -04:00
// Ensure backward compatibility.
2010-07-30 16:34:54 -04:00
$compat = array (
2017-11-30 18:11:00 -05:00
'index' => 'dashboard' ,
'edit' => 'posts' ,
'post' => 'posts' ,
'upload' => 'media' ,
'link-manager' => 'links' ,
'edit-pages' => 'pages' ,
'page' => 'pages' ,
'edit-comments' => 'comments' ,
2010-07-30 16:34:54 -04:00
'options-general' => 'settings' ,
2017-11-30 18:11:00 -05:00
'themes' => 'appearance' ,
);
2010-07-30 16:34:54 -04:00
2017-11-30 18:11:00 -05:00
require_once ( ABSPATH . 'wp-admin/includes/menu.php' );