From 5edfea22b91dda617ea8df86aaefdce8bb0bc1af Mon Sep 17 00:00:00 2001 From: Felix Arntz Date: Sat, 30 Sep 2017 03:54:45 +0000 Subject: [PATCH] Multisite: Fix `count_users()` possibly querying incorrect roles when passed a different site ID. The `time` strategy in `count_users()` queries users by role. However, the roles queried for were not affected by passing another site than the current one through the `$site_id` parameter, causing users having roles that were not queried for to appear as users without a role. This changeset fixes the issue by switching the site before retrieving the roles to query for. Fixes #42014. Built from https://develop.svn.wordpress.org/trunk@41653 git-svn-id: http://core.svn.wordpress.org/trunk@41487 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-includes/user.php | 8 +++++++- wp-includes/version.php | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/wp-includes/user.php b/wp-includes/user.php index 73a5fab469..e74f87d5e7 100644 --- a/wp-includes/user.php +++ b/wp-includes/user.php @@ -855,7 +855,13 @@ function count_users( $strategy = 'time', $site_id = null ) { $result = array(); if ( 'time' == $strategy ) { - $avail_roles = wp_roles()->get_names(); + if ( is_multisite() && $site_id != get_current_blog_id() ) { + switch_to_blog( $site_id ); + $avail_roles = wp_roles()->get_names(); + restore_current_blog(); + } else { + $avail_roles = wp_roles()->get_names(); + } // Build a CPU-intensive query that will return concise information. $select_count = array(); diff --git a/wp-includes/version.php b/wp-includes/version.php index bd25b76da0..f2911a878b 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -4,7 +4,7 @@ * * @global string $wp_version */ -$wp_version = '4.9-alpha-41652'; +$wp_version = '4.9-alpha-41653'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.