diff --git src/wp-includes/class-wp-site-query.php src/wp-includes/class-wp-site-query.php
index bc3e3519a3..5dab71529a 100644
|
|
|
class WP_Site_Query { |
| 288 | 288 | $this->meta_query_clauses = $this->meta_query->get_sql( 'blog', $wpdb->blogs, 'blog_id', $this ); |
| 289 | 289 | } |
| 290 | 290 | |
| 291 | | // $args can include anything. Only use the args defined in the query_var_defaults to compute the key. |
| 292 | | $_args = wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ); |
| 293 | 291 | |
| 294 | | // Ignore the $fields argument as the queried result will be the same regardless. |
| 295 | | unset( $_args['fields'] ); |
| | 292 | /** |
| | 293 | * Filter the sites array before the query takes place. |
| | 294 | * |
| | 295 | * Return a non-null value to bypass WordPress's default site queries. |
| | 296 | * |
| | 297 | * |
| | 298 | * @since 5.2.0 |
| | 299 | * |
| | 300 | * @param array|null $site_ids Return an array of site data to short-circuit WP's site query, |
| | 301 | * or null to allow WP to run its normal queries. |
| | 302 | * @param WP_Query $this The WP_Site_Query instance, passed by reference. |
| | 303 | */ |
| | 304 | $site_ids = apply_filters_ref_array( 'sites_pre_query', array( null, &$this ) ); |
| 296 | 305 | |
| 297 | | $key = md5( serialize( $_args ) ); |
| 298 | | $last_changed = wp_cache_get_last_changed( 'sites' ); |
| | 306 | if ( null === $site_ids ) { |
| 299 | 307 | |
| 300 | | $cache_key = "get_sites:$key:$last_changed"; |
| 301 | | $cache_value = wp_cache_get( $cache_key, 'sites' ); |
| | 308 | // $args can include anything. Only use the args defined in the query_var_defaults to compute the key. |
| | 309 | $_args = wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ); |
| 302 | 310 | |
| 303 | | if ( false === $cache_value ) { |
| 304 | | $site_ids = $this->get_site_ids(); |
| 305 | | if ( $site_ids ) { |
| 306 | | $this->set_found_sites(); |
| 307 | | } |
| | 311 | // Ignore the $fields argument as the queried result will be the same regardless. |
| | 312 | unset( $_args['fields'] ); |
| 308 | 313 | |
| 309 | | $cache_value = array( |
| 310 | | 'site_ids' => $site_ids, |
| 311 | | 'found_sites' => $this->found_sites, |
| 312 | | ); |
| 313 | | wp_cache_add( $cache_key, $cache_value, 'sites' ); |
| 314 | | } else { |
| 315 | | $site_ids = $cache_value['site_ids']; |
| 316 | | $this->found_sites = $cache_value['found_sites']; |
| | 314 | $key = md5( serialize( $_args ) ); |
| | 315 | $last_changed = wp_cache_get_last_changed( 'sites' ); |
| | 316 | |
| | 317 | $cache_key = "get_sites:$key:$last_changed"; |
| | 318 | $cache_value = wp_cache_get( $cache_key, 'sites' ); |
| | 319 | |
| | 320 | if ( false === $cache_value ) { |
| | 321 | $site_ids = $this->get_site_ids(); |
| | 322 | if ( $site_ids ) { |
| | 323 | $this->set_found_sites(); |
| | 324 | } |
| | 325 | |
| | 326 | $cache_value = array( |
| | 327 | 'site_ids' => $site_ids, |
| | 328 | 'found_sites' => $this->found_sites, |
| | 329 | ); |
| | 330 | wp_cache_add( $cache_key, $cache_value, 'sites' ); |
| | 331 | } else { |
| | 332 | $site_ids = $cache_value['site_ids']; |
| | 333 | $this->found_sites = $cache_value['found_sites']; |
| | 334 | } |
| 317 | 335 | } |
| 318 | 336 | |
| 319 | 337 | if ( $this->found_sites && $this->query_vars['number'] ) { |