diff --git a/src/wp-includes/class-wp-site-query.php b/src/wp-includes/class-wp-site-query.php index b711422479..774f83ea18 100644 --- a/src/wp-includes/class-wp-site-query.php +++ b/src/wp-includes/class-wp-site-query.php @@ -251,7 +251,12 @@ class WP_Site_Query { do_action_ref_array( 'pre_get_sites', array( &$this ) ); // $args can include anything. Only use the args defined in the query_var_defaults to compute the key. - $key = md5( serialize( wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ) ) ); + $_args = wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ); + + // Ignore the $fields argument as the queried result will be the same regardless. + unset( $_args['fields'] ); + + $key = md5( serialize( $_args ) ); $last_changed = wp_cache_get_last_changed( 'sites' ); $cache_key = "get_sites:$key:$last_changed"; diff --git a/tests/phpunit/tests/multisite/siteQuery.php b/tests/phpunit/tests/multisite/siteQuery.php index 7a739a537d..e6f958d385 100644 --- a/tests/phpunit/tests/multisite/siteQuery.php +++ b/tests/phpunit/tests/multisite/siteQuery.php @@ -661,6 +661,82 @@ class Tests_Multisite_Site_Query extends WP_UnitTestCase { $this->assertEqualSets( $expected, $found ); } + + /** + * @ticket 41197 + */ + public function test_wp_site_query_cache_with_different_fields_no_count() { + global $wpdb; + $q = new WP_Site_Query(); + $query_1 = $q->query( array( + 'fields' => 'all', + 'network_id' => self::$network_ids['wordpress.org/'], + 'number' => 3, + 'order' => 'ASC', + ) ); + $number_of_queries = $wpdb->num_queries; + + $query_2 = $q->query( array( + 'fields' => 'ids', + 'network_id' => self::$network_ids['wordpress.org/'], + 'number' => 3, + 'order' => 'ASC', + ) ); + + $this->assertEquals( $number_of_queries, $wpdb->num_queries ); + } + + /** + * @ticket 41197 + */ + public function test_wp_site_query_cache_with_different_fields_active_count() { + global $wpdb; + $q = new WP_Site_Query(); + + $query_1 = $q->query( array( + 'fields' => 'all', + 'network_id' => self::$network_ids['wordpress.org/'], + 'number' => 3, + 'order' => 'ASC', + 'count' => true, + ) ); + $number_of_queries = $wpdb->num_queries; + + $query_2 = $q->query( array( + 'fields' => 'ids', + 'network_id' => self::$network_ids['wordpress.org/'], + 'number' => 3, + 'order' => 'ASC', + 'count' => true, + ) ); + $this->assertEquals( $number_of_queries, $wpdb->num_queries ); + } + + /** + * @ticket 41197 + */ + public function test_wp_site_query_cache_with_same_fields_different_count() { + global $wpdb; + $q = new WP_Site_Query(); + + $query_1 = $q->query( array( + 'fields' => 'ids', + 'network_id' => self::$network_ids['wordpress.org/'], + 'number' => 3, + 'order' => 'ASC', + ) ); + + $number_of_queries = $wpdb->num_queries; + + $query_2 = $q->query( array( + 'fields' => 'ids', + 'network_id' => self::$network_ids['wordpress.org/'], + 'number' => 3, + 'order' => 'ASC', + 'count' => true, + ) ); + $this->assertEquals( $number_of_queries + 1, $wpdb->num_queries ); + } } endif;