diff -r 490d5cc509ed -r cf61fcea0001 wp/wp-includes/admin-bar.php
--- a/wp/wp-includes/admin-bar.php Tue Jun 09 11:14:17 2015 +0000
+++ b/wp/wp-includes/admin-bar.php Mon Oct 14 17:39:30 2019 +0200
@@ -1,18 +1,23 @@
menu member var.
- * This is called very late on the footer actions so that it will render after anything else being
- * added to the footer.
+ * Renders the admin bar to the page based on the $wp_admin_bar->menu member var.
+ *
+ * This is called very late on the footer actions so that it will render after
+ * anything else being added to the footer.
*
- * It includes the action "admin_bar_menu" which should be used to hook in and
- * add new menus to the admin bar. That way you can be sure that you are adding at most optimal point,
- * right before the admin bar is rendered. This also gives you access to the $post global, among others.
+ * It includes the {@see 'admin_bar_menu'} action which should be used to hook in and
+ * add new menus to the admin bar. That way you can be sure that you are adding at most
+ * optimal point, right before the admin bar is rendered. This also gives you access to
+ * the `$post` global, among others.
*
* @since 3.1.0
+ *
+ * @global WP_Admin_Bar $wp_admin_bar
*/
function wp_admin_bar_render() {
global $wp_admin_bar;
if ( ! is_admin_bar_showing() || ! is_object( $wp_admin_bar ) )
- return false;
+ return;
/**
* Load all necessary admin bar items.
@@ -98,19 +107,36 @@
* @param WP_Admin_Bar $wp_admin_bar
*/
function wp_admin_bar_wp_menu( $wp_admin_bar ) {
- $wp_admin_bar->add_menu( array(
+ if ( current_user_can( 'read' ) ) {
+ $about_url = self_admin_url( 'about.php' );
+ } elseif ( is_multisite() ) {
+ $about_url = get_dashboard_url( get_current_user_id(), 'about.php' );
+ } else {
+ $about_url = false;
+ }
+
+ $wp_logo_menu_args = array(
'id' => 'wp-logo',
'title' => '' . __( 'About WordPress' ) . '',
- 'href' => self_admin_url( 'about.php' ),
- ) );
+ 'href' => $about_url,
+ );
- if ( is_user_logged_in() ) {
+ // Set tabindex="0" to make sub menus accessible when no URL is available.
+ if ( ! $about_url ) {
+ $wp_logo_menu_args['meta'] = array(
+ 'tabindex' => 0,
+ );
+ }
+
+ $wp_admin_bar->add_menu( $wp_logo_menu_args );
+
+ if ( $about_url ) {
// Add "About WordPress" link
$wp_admin_bar->add_menu( array(
'parent' => 'wp-logo',
'id' => 'about',
'title' => __('About WordPress'),
- 'href' => self_admin_url( 'about.php' ),
+ 'href' => $about_url,
) );
}
@@ -174,13 +200,21 @@
function wp_admin_bar_my_account_item( $wp_admin_bar ) {
$user_id = get_current_user_id();
$current_user = wp_get_current_user();
- $profile_url = get_edit_profile_url( $user_id );
if ( ! $user_id )
return;
+ if ( current_user_can( 'read' ) ) {
+ $profile_url = get_edit_profile_url( $user_id );
+ } elseif ( is_multisite() ) {
+ $profile_url = get_dashboard_url( $user_id, 'profile.php' );
+ } else {
+ $profile_url = false;
+ }
+
$avatar = get_avatar( $user_id, 26 );
- $howdy = sprintf( __('Howdy, %1$s'), $current_user->display_name );
+ /* translators: %s: current user's display name */
+ $howdy = sprintf( __( 'Howdy, %s' ), '' . $current_user->display_name . '' );
$class = empty( $avatar ) ? '' : 'with-avatar';
$wp_admin_bar->add_menu( array(
@@ -204,11 +238,18 @@
function wp_admin_bar_my_account_menu( $wp_admin_bar ) {
$user_id = get_current_user_id();
$current_user = wp_get_current_user();
- $profile_url = get_edit_profile_url( $user_id );
if ( ! $user_id )
return;
+ if ( current_user_can( 'read' ) ) {
+ $profile_url = get_edit_profile_url( $user_id );
+ } elseif ( is_multisite() ) {
+ $profile_url = get_dashboard_url( $user_id, 'profile.php' );
+ } else {
+ $profile_url = false;
+ }
+
$wp_admin_bar->add_group( array(
'parent' => 'my-account',
'id' => 'user-actions',
@@ -229,12 +270,16 @@
'tabindex' => -1,
),
) );
- $wp_admin_bar->add_menu( array(
- 'parent' => 'user-actions',
- 'id' => 'edit-profile',
- 'title' => __( 'Edit My Profile' ),
- 'href' => $profile_url,
- ) );
+
+ if ( false !== $profile_url ) {
+ $wp_admin_bar->add_menu( array(
+ 'parent' => 'user-actions',
+ 'id' => 'edit-profile',
+ 'title' => __( 'Edit My Profile' ),
+ 'href' => $profile_url,
+ ) );
+ }
+
$wp_admin_bar->add_menu( array(
'parent' => 'user-actions',
'id' => 'logout',
@@ -256,8 +301,9 @@
return;
// Show only when the user is a member of this site, or they're a super admin.
- if ( ! is_user_member_of_blog() && ! is_super_admin() )
+ if ( ! is_user_member_of_blog() && ! current_user_can( 'manage_network' ) ) {
return;
+ }
$blogname = get_bloginfo('name');
@@ -266,9 +312,11 @@
}
if ( is_network_admin() ) {
- $blogname = sprintf( __('Network Admin: %s'), esc_html( get_current_site()->site_name ) );
+ /* translators: %s: site name */
+ $blogname = sprintf( __( 'Network Admin: %s' ), esc_html( get_network()->site_name ) );
} elseif ( is_user_admin() ) {
- $blogname = sprintf( __('Global Dashboard: %s'), esc_html( get_current_site()->site_name ) );
+ /* translators: %s: site name */
+ $blogname = sprintf( __( 'User Dashboard: %s' ), esc_html( get_network()->site_name ) );
}
$title = wp_html_excerpt( $blogname, 40, '…' );
@@ -276,7 +324,7 @@
$wp_admin_bar->add_menu( array(
'id' => 'site-name',
'title' => $title,
- 'href' => is_admin() ? home_url( '/' ) : admin_url(),
+ 'href' => ( is_admin() || ! current_user_can( 'read' ) ) ? home_url( '/' ) : admin_url(),
) );
// Create submenu items.
@@ -299,7 +347,7 @@
) );
}
- } else {
+ } else if ( current_user_can( 'read' ) ) {
// We're on the front end, link to the Dashboard.
$wp_admin_bar->add_menu( array(
'parent' => 'site-name',
@@ -314,6 +362,48 @@
}
/**
+ * Adds the "Customize" link to the Toolbar.
+ *
+ * @since 4.3.0
+ *
+ * @param WP_Admin_Bar $wp_admin_bar WP_Admin_Bar instance.
+ * @global WP_Customize_Manager $wp_customize
+ */
+function wp_admin_bar_customize_menu( $wp_admin_bar ) {
+ global $wp_customize;
+
+ // Don't show for users who can't access the customizer or when in the admin.
+ if ( ! current_user_can( 'customize' ) || is_admin() ) {
+ return;
+ }
+
+ // Don't show if the user cannot edit a given customize_changeset post currently being previewed.
+ if ( is_customize_preview() && $wp_customize->changeset_post_id() && ! current_user_can( get_post_type_object( 'customize_changeset' )->cap->edit_post, $wp_customize->changeset_post_id() ) ) {
+ return;
+ }
+
+ $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+ if ( is_customize_preview() && $wp_customize->changeset_uuid() ) {
+ $current_url = remove_query_arg( 'customize_changeset_uuid', $current_url );
+ }
+
+ $customize_url = add_query_arg( 'url', urlencode( $current_url ), wp_customize_url() );
+ if ( is_customize_preview() ) {
+ $customize_url = add_query_arg( array( 'changeset_uuid' => $wp_customize->changeset_uuid() ), $customize_url );
+ }
+
+ $wp_admin_bar->add_menu( array(
+ 'id' => 'customize',
+ 'title' => __( 'Customize' ),
+ 'href' => $customize_url,
+ 'meta' => array(
+ 'class' => 'hide-if-no-customize',
+ ),
+ ) );
+ add_action( 'wp_before_admin_bar_render', 'wp_customize_support_script' );
+}
+
+/**
* Add the "My Sites/[Site Name]" menu and all submenus.
*
* @since 3.1.0
@@ -326,8 +416,9 @@
return;
// Show only when the user has at least one site, or they're a super admin.
- if ( count( $wp_admin_bar->user->blogs ) < 1 && ! is_super_admin() )
+ if ( count( $wp_admin_bar->user->blogs ) < 1 && ! current_user_can( 'manage_network' ) ) {
return;
+ }
if ( $wp_admin_bar->user->active_blog ) {
$my_sites_url = get_admin_url( $wp_admin_bar->user->active_blog->blog_id, 'my-sites.php' );
@@ -341,7 +432,7 @@
'href' => $my_sites_url,
) );
- if ( is_super_admin() ) {
+ if ( current_user_can( 'manage_network' ) ) {
$wp_admin_bar->add_group( array(
'parent' => 'my-sites',
'id' => 'my-sites-super-admin',
@@ -360,30 +451,51 @@
'title' => __( 'Dashboard' ),
'href' => network_admin_url(),
) );
- $wp_admin_bar->add_menu( array(
- 'parent' => 'network-admin',
- 'id' => 'network-admin-s',
- 'title' => __( 'Sites' ),
- 'href' => network_admin_url( 'sites.php' ),
- ) );
- $wp_admin_bar->add_menu( array(
- 'parent' => 'network-admin',
- 'id' => 'network-admin-u',
- 'title' => __( 'Users' ),
- 'href' => network_admin_url( 'users.php' ),
- ) );
- $wp_admin_bar->add_menu( array(
- 'parent' => 'network-admin',
- 'id' => 'network-admin-t',
- 'title' => __( 'Themes' ),
- 'href' => network_admin_url( 'themes.php' ),
- ) );
- $wp_admin_bar->add_menu( array(
- 'parent' => 'network-admin',
- 'id' => 'network-admin-p',
- 'title' => __( 'Plugins' ),
- 'href' => network_admin_url( 'plugins.php' ),
- ) );
+
+ if ( current_user_can( 'manage_sites' ) ) {
+ $wp_admin_bar->add_menu( array(
+ 'parent' => 'network-admin',
+ 'id' => 'network-admin-s',
+ 'title' => __( 'Sites' ),
+ 'href' => network_admin_url( 'sites.php' ),
+ ) );
+ }
+
+ if ( current_user_can( 'manage_network_users' ) ) {
+ $wp_admin_bar->add_menu( array(
+ 'parent' => 'network-admin',
+ 'id' => 'network-admin-u',
+ 'title' => __( 'Users' ),
+ 'href' => network_admin_url( 'users.php' ),
+ ) );
+ }
+
+ if ( current_user_can( 'manage_network_themes' ) ) {
+ $wp_admin_bar->add_menu( array(
+ 'parent' => 'network-admin',
+ 'id' => 'network-admin-t',
+ 'title' => __( 'Themes' ),
+ 'href' => network_admin_url( 'themes.php' ),
+ ) );
+ }
+
+ if ( current_user_can( 'manage_network_plugins' ) ) {
+ $wp_admin_bar->add_menu( array(
+ 'parent' => 'network-admin',
+ 'id' => 'network-admin-p',
+ 'title' => __( 'Plugins' ),
+ 'href' => network_admin_url( 'plugins.php' ),
+ ) );
+ }
+
+ if ( current_user_can( 'manage_network_options' ) ) {
+ $wp_admin_bar->add_menu( array(
+ 'parent' => 'network-admin',
+ 'id' => 'network-admin-o',
+ 'title' => __( 'Settings' ),
+ 'href' => network_admin_url( 'settings.php' ),
+ ) );
+ }
}
// Add site links
@@ -391,7 +503,7 @@
'parent' => 'my-sites',
'id' => 'my-sites-list',
'meta' => array(
- 'class' => is_super_admin() ? 'ab-sub-secondary' : '',
+ 'class' => current_user_can( 'manage_network' ) ? 'ab-sub-secondary' : '',
),
) );
@@ -408,19 +520,28 @@
$menu_id = 'blog-' . $blog->userblog_id;
- $wp_admin_bar->add_menu( array(
- 'parent' => 'my-sites-list',
- 'id' => $menu_id,
- 'title' => $blavatar . $blogname,
- 'href' => admin_url(),
- ) );
+ if ( current_user_can( 'read' ) ) {
+ $wp_admin_bar->add_menu( array(
+ 'parent' => 'my-sites-list',
+ 'id' => $menu_id,
+ 'title' => $blavatar . $blogname,
+ 'href' => admin_url(),
+ ) );
- $wp_admin_bar->add_menu( array(
- 'parent' => $menu_id,
- 'id' => $menu_id . '-d',
- 'title' => __( 'Dashboard' ),
- 'href' => admin_url(),
- ) );
+ $wp_admin_bar->add_menu( array(
+ 'parent' => $menu_id,
+ 'id' => $menu_id . '-d',
+ 'title' => __( 'Dashboard' ),
+ 'href' => admin_url(),
+ ) );
+ } else {
+ $wp_admin_bar->add_menu( array(
+ 'parent' => 'my-sites-list',
+ 'id' => $menu_id,
+ 'title' => $blavatar . $blogname,
+ 'href' => home_url(),
+ ) );
+ }
if ( current_user_can( get_post_type_object( 'post' )->cap->create_posts ) ) {
$wp_admin_bar->add_menu( array(
@@ -480,10 +601,13 @@
*
* @since 3.1.0
*
+ * @global WP_Term $tag
+ * @global WP_Query $wp_the_query
+ *
* @param WP_Admin_Bar $wp_admin_bar
*/
function wp_admin_bar_edit_menu( $wp_admin_bar ) {
- global $tag, $wp_the_query;
+ global $tag, $wp_the_query, $user_id;
if ( is_admin() ) {
$current_screen = get_current_screen();
@@ -496,10 +620,8 @@
&& ( $post_type_object->public )
&& ( $post_type_object->show_in_admin_bar ) )
{
- if( 'draft' == $post->post_status ) {
- $preview_link = set_url_scheme( get_permalink( $post->ID ) );
- /** This filter is documented in wp-admin/includes/meta-boxes.php */
- $preview_link = apply_filters( 'preview_post_link', add_query_arg( 'preview', 'true', $preview_link ), $post );
+ if ( 'draft' == $post->post_status ) {
+ $preview_link = get_preview_post_link( $post );
$wp_admin_bar->add_menu( array(
'id' => 'preview',
'title' => $post_type_object->labels->view_item,
@@ -513,8 +635,20 @@
'href' => get_permalink( $post->ID )
) );
}
- } elseif ( 'edit-tags' == $current_screen->base
- && isset( $tag ) && is_object( $tag )
+ } elseif ( 'edit' == $current_screen->base
+ && ( $post_type_object = get_post_type_object( $current_screen->post_type ) )
+ && ( $post_type_object->public )
+ && ( $post_type_object->show_in_admin_bar )
+ && ( get_post_type_archive_link( $post_type_object->name ) )
+ && ! ( 'post' === $post_type_object->name && 'posts' === get_option( 'show_on_front' ) ) )
+ {
+ $wp_admin_bar->add_node( array(
+ 'id' => 'archive',
+ 'title' => $post_type_object->labels->view_items,
+ 'href' => get_post_type_archive_link( $current_screen->post_type )
+ ) );
+ } elseif ( 'term' == $current_screen->base
+ && isset( $tag ) && is_object( $tag ) && ! is_wp_error( $tag )
&& ( $tax = get_taxonomy( $tag->taxonomy ) )
&& $tax->public )
{
@@ -523,6 +657,17 @@
'title' => $tax->labels->view_item,
'href' => get_term_link( $tag )
) );
+ } elseif ( 'user-edit' == $current_screen->base
+ && isset( $user_id )
+ && ( $user_object = get_userdata( $user_id ) )
+ && $user_object->exists()
+ && $view_link = get_author_posts_url( $user_object->ID ) )
+ {
+ $wp_admin_bar->add_menu( array(
+ 'id' => 'view',
+ 'title' => __( 'View User' ),
+ 'href' => $view_link,
+ ) );
}
} else {
$current_object = $wp_the_query->get_queried_object();
@@ -533,7 +678,7 @@
if ( ! empty( $current_object->post_type )
&& ( $post_type_object = get_post_type_object( $current_object->post_type ) )
&& current_user_can( 'edit_post', $current_object->ID )
- && $post_type_object->show_ui && $post_type_object->show_in_admin_bar
+ && $post_type_object->show_in_admin_bar
&& $edit_post_link = get_edit_post_link( $current_object->ID ) )
{
$wp_admin_bar->add_menu( array(
@@ -543,8 +688,7 @@
) );
} elseif ( ! empty( $current_object->taxonomy )
&& ( $tax = get_taxonomy( $current_object->taxonomy ) )
- && current_user_can( $tax->cap->edit_terms )
- && $tax->show_ui
+ && current_user_can( 'edit_term', $current_object->term_id )
&& $edit_term_link = get_edit_term_link( $current_object->term_id, $current_object->taxonomy ) )
{
$wp_admin_bar->add_menu( array(
@@ -552,6 +696,15 @@
'title' => $tax->labels->edit_item,
'href' => $edit_term_link
) );
+ } elseif ( is_a( $current_object, 'WP_User' )
+ && current_user_can( 'edit_user', $current_object->ID )
+ && $edit_user_link = get_edit_user_link( $current_object->ID ) )
+ {
+ $wp_admin_bar->add_menu( array(
+ 'id' => 'edit',
+ 'title' => __( 'Edit User' ),
+ 'href' => $edit_user_link,
+ ) );
}
}
}
@@ -594,8 +747,9 @@
if ( isset( $actions['post-new.php?post_type=content'] ) )
$actions['post-new.php?post_type=content'][1] = 'add-new-content';
- if ( current_user_can( 'create_users' ) || current_user_can( 'promote_users' ) )
+ if ( current_user_can( 'create_users' ) || ( is_multisite() && current_user_can( 'promote_users' ) ) ) {
$actions[ 'user-new.php' ] = array( _x( 'User', 'add new from admin bar' ), 'new-user' );
+ }
if ( ! $actions )
return;
@@ -633,16 +787,16 @@
$awaiting_mod = wp_count_comments();
$awaiting_mod = $awaiting_mod->moderated;
- $awaiting_title = esc_attr( sprintf( _n( '%s comment awaiting moderation', '%s comments awaiting moderation', $awaiting_mod ), number_format_i18n( $awaiting_mod ) ) );
+ $awaiting_text = sprintf( _n( '%s comment awaiting moderation', '%s comments awaiting moderation', $awaiting_mod ), number_format_i18n( $awaiting_mod ) );
$icon = '';
- $title = '' . number_format_i18n( $awaiting_mod ) . '';
+ $title = '' . number_format_i18n( $awaiting_mod ) . '';
+ $title .= '' . $awaiting_text . '';
$wp_admin_bar->add_menu( array(
'id' => 'comments',
'title' => $icon . $title,
'href' => admin_url('edit-comments.php'),
- 'meta' => array( 'title' => $awaiting_title ),
) );
}
@@ -656,44 +810,13 @@
function wp_admin_bar_appearance_menu( $wp_admin_bar ) {
$wp_admin_bar->add_group( array( 'parent' => 'site-name', 'id' => 'appearance' ) );
- $current_url = ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
- $customize_url = add_query_arg( 'url', urlencode( $current_url ), wp_customize_url() );
-
if ( current_user_can( 'switch_themes' ) ) {
$wp_admin_bar->add_menu( array(
'parent' => 'appearance',
'id' => 'themes',
'title' => __( 'Themes' ),
'href' => admin_url( 'themes.php' ),
- 'meta' => array(
- 'class' => 'hide-if-customize',
- ),
) );
-
- if ( current_user_can( 'customize' ) ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'appearance',
- 'id' => 'customize-themes',
- 'title' => __( 'Themes' ),
- 'href' => add_query_arg( urlencode( 'autofocus[section]' ), 'themes', $customize_url ), // urlencode() needed due to #16859
- 'meta' => array(
- 'class' => 'hide-if-no-customize',
- ),
- ) );
- }
- }
-
- if ( current_user_can( 'customize' ) ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'appearance',
- 'id' => 'customize',
- 'title' => __('Customize'),
- 'href' => $customize_url,
- 'meta' => array(
- 'class' => 'hide-if-no-customize',
- ),
- ) );
- add_action( 'wp_before_admin_bar_render', 'wp_customize_support_script' );
}
if ( ! current_user_can( 'edit_theme_options' ) ) {
@@ -706,22 +829,7 @@
'id' => 'widgets',
'title' => __( 'Widgets' ),
'href' => admin_url( 'widgets.php' ),
- 'meta' => array(
- 'class' => 'hide-if-customize',
- ),
) );
-
- if ( current_user_can( 'customize' ) ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'appearance',
- 'id' => 'customize-widgets',
- 'title' => __( 'Widgets' ),
- 'href' => add_query_arg( urlencode( 'autofocus[panel]' ), 'widgets', $customize_url ), // urlencode() needed due to #16859
- 'meta' => array(
- 'class' => 'hide-if-no-customize',
- ),
- ) );
- }
}
if ( current_theme_supports( 'menus' ) || current_theme_supports( 'widgets' ) )
@@ -737,18 +845,6 @@
'class' => 'hide-if-customize',
),
) );
-
- if ( current_user_can( 'customize' ) ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'appearance',
- 'id' => 'customize-background',
- 'title' => __( 'Background' ),
- 'href' => add_query_arg( urlencode( 'autofocus[control]' ), 'background_image', $customize_url ), // urlencode() needed due to #16859
- 'meta' => array(
- 'class' => 'hide-if-no-customize',
- ),
- ) );
- }
}
if ( current_theme_supports( 'custom-header' ) ) {
@@ -761,18 +857,6 @@
'class' => 'hide-if-customize',
),
) );
-
- if ( current_user_can( 'customize' ) ) {
- $wp_admin_bar->add_menu( array(
- 'parent' => 'appearance',
- 'id' => 'customize-header',
- 'title' => __( 'Header' ),
- 'href' => add_query_arg( urlencode( 'autofocus[control]' ), 'header_image', $customize_url ), // urlencode() needed due to #16859
- 'meta' => array(
- 'class' => 'hide-if-no-customize',
- ),
- ) );
- }
}
}
@@ -884,14 +968,16 @@
}
/**
- * Set the display status of the admin bar.
+ * Sets the display status of the admin bar.
*
- * This can be called immediately upon plugin load. It does not need to be called from a function hooked to the init action.
+ * This can be called immediately upon plugin load. It does not need to be called
+ * from a function hooked to the {@see 'init'} action.
*
* @since 3.1.0
*
+ * @global bool $show_admin_bar
+ *
* @param bool $show Whether to allow the admin bar to show.
- * @return void
*/
function show_admin_bar( $show ) {
global $show_admin_bar;
@@ -903,6 +989,9 @@
*
* @since 3.1.0
*
+ * @global bool $show_admin_bar
+ * @global string $pagenow
+ *
* @return bool Whether the admin bar should be showing.
*/
function is_admin_bar_showing() {
@@ -912,6 +1001,10 @@
if ( defined('XMLRPC_REQUEST') || defined('DOING_AJAX') || defined('IFRAME_REQUEST') )
return false;
+ if ( is_embed() ) {
+ return false;
+ }
+
// Integrated into the admin.
if ( is_admin() )
return true;
@@ -925,7 +1018,7 @@
}
/**
- * Filter whether to show the admin bar.
+ * Filters whether to show the admin bar.
*
* Returning false to this hook is the recommended way to hide the admin bar.
* The user's display preference is used for logged in users.