From 832b16b9662eda433b28c9b8ddbaa47901e0a6be Mon Sep 17 00:00:00 2001 From: Felix Arntz Date: Tue, 24 Jan 2017 16:29:40 +0000 Subject: [PATCH] Multisite: Show menu items in `My Sites > Network Admin` admin bar menu based on more precise capability checks. Previously the menu items would all be displayed solely based on the `manage_network` capability. This change provides parity with the network admin menu. Unit tests for the network admin menu functionality of `wp_admin_bar_my_sites_menu()` have been added. Props chandrapatel. Fixes #39082. Built from https://develop.svn.wordpress.org/trunk@39948 git-svn-id: http://core.svn.wordpress.org/trunk@39885 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/admin-bar.php | 75 +++++++++++++++++++++++---------------- wp-includes/version.php | 2 +- 2 files changed, 46 insertions(+), 31 deletions(-) diff --git a/wp-includes/admin-bar.php b/wp-includes/admin-bar.php index 2421ff278a..98a052379c 100644 --- a/wp-includes/admin-bar.php +++ b/wp-includes/admin-bar.php @@ -451,36 +451,51 @@ function wp_admin_bar_my_sites_menu( $wp_admin_bar ) { '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' ), - ) ); - $wp_admin_bar->add_menu( array( - 'parent' => 'network-admin', - 'id' => 'network-admin-o', - 'title' => __( 'Settings' ), - 'href' => network_admin_url( 'settings.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 diff --git a/wp-includes/version.php b/wp-includes/version.php index 42f6a49a6a..20c0f55385 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.8-alpha-39947'; +$wp_version = '4.8-alpha-39948'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.