| @@ 198-276 (lines=79) @@ | ||
| 195 | * |
|
| 196 | * @return int|array The list of networks. |
|
| 197 | */ |
|
| 198 | public function get_networks() { |
|
| 199 | $this->parse_query(); |
|
| 200 | ||
| 201 | /** |
|
| 202 | * Fires before networks are retrieved. |
|
| 203 | * |
|
| 204 | * @since 4.6.0 |
|
| 205 | * |
|
| 206 | * @param WP_Network_Query &$this Current instance of WP_Network_Query, passed by reference. |
|
| 207 | */ |
|
| 208 | do_action_ref_array( 'pre_get_networks', array( &$this ) ); |
|
| 209 | ||
| 210 | // $args can include anything. Only use the args defined in the query_var_defaults to compute the key. |
|
| 211 | $key = md5( serialize( wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ) ) ); |
|
| 212 | $last_changed = wp_cache_get_last_changed( 'networks' ); |
|
| 213 | ||
| 214 | $cache_key = "get_network_ids:$key:$last_changed"; |
|
| 215 | $cache_value = wp_cache_get( $cache_key, 'networks' ); |
|
| 216 | ||
| 217 | if ( false === $cache_value ) { |
|
| 218 | $network_ids = $this->get_network_ids(); |
|
| 219 | if ( $network_ids ) { |
|
| 220 | $this->set_found_networks(); |
|
| 221 | } |
|
| 222 | ||
| 223 | $cache_value = array( |
|
| 224 | 'network_ids' => $network_ids, |
|
| 225 | 'found_networks' => $this->found_networks, |
|
| 226 | ); |
|
| 227 | wp_cache_add( $cache_key, $cache_value, 'networks' ); |
|
| 228 | } else { |
|
| 229 | $network_ids = $cache_value['network_ids']; |
|
| 230 | $this->found_networks = $cache_value['found_networks']; |
|
| 231 | } |
|
| 232 | ||
| 233 | if ( $this->found_networks && $this->query_vars['number'] ) { |
|
| 234 | $this->max_num_pages = ceil( $this->found_networks / $this->query_vars['number'] ); |
|
| 235 | } |
|
| 236 | ||
| 237 | // If querying for a count only, there's nothing more to do. |
|
| 238 | if ( $this->query_vars['count'] ) { |
|
| 239 | // $network_ids is actually a count in this case. |
|
| 240 | return intval( $network_ids ); |
|
| 241 | } |
|
| 242 | ||
| 243 | $network_ids = array_map( 'intval', $network_ids ); |
|
| 244 | ||
| 245 | if ( 'ids' == $this->query_vars['fields'] ) { |
|
| 246 | $this->networks = $network_ids; |
|
| 247 | return $this->networks; |
|
| 248 | } |
|
| 249 | ||
| 250 | if ( $this->query_vars['update_network_cache'] ) { |
|
| 251 | _prime_network_caches( $network_ids ); |
|
| 252 | } |
|
| 253 | ||
| 254 | // Fetch full network objects from the primed cache. |
|
| 255 | $_networks = array(); |
|
| 256 | foreach ( $network_ids as $network_id ) { |
|
| 257 | if ( $_network = get_network( $network_id ) ) { |
|
| 258 | $_networks[] = $_network; |
|
| 259 | } |
|
| 260 | } |
|
| 261 | ||
| 262 | /** |
|
| 263 | * Filters the network query results. |
|
| 264 | * |
|
| 265 | * @since 4.6.0 |
|
| 266 | * |
|
| 267 | * @param array $results An array of networks. |
|
| 268 | * @param WP_Network_Query &$this Current instance of WP_Network_Query, passed by reference. |
|
| 269 | */ |
|
| 270 | $_networks = apply_filters_ref_array( 'the_networks', array( $_networks, &$this ) ); |
|
| 271 | ||
| 272 | // Convert to WP_Network instances |
|
| 273 | $this->networks = array_map( 'get_network', $_networks ); |
|
| 274 | ||
| 275 | return $this->networks; |
|
| 276 | } |
|
| 277 | ||
| 278 | /** |
|
| 279 | * Used internally to get a list of network IDs matching the query vars. |
|
| @@ 241-321 (lines=81) @@ | ||
| 238 | * |
|
| 239 | * @return array|int List of sites, or number of sites when 'count' is passed as a query var. |
|
| 240 | */ |
|
| 241 | public function get_sites() { |
|
| 242 | $this->parse_query(); |
|
| 243 | ||
| 244 | /** |
|
| 245 | * Fires before sites are retrieved. |
|
| 246 | * |
|
| 247 | * @since 4.6.0 |
|
| 248 | * |
|
| 249 | * @param WP_Site_Query &$this Current instance of WP_Site_Query, passed by reference. |
|
| 250 | */ |
|
| 251 | do_action_ref_array( 'pre_get_sites', array( &$this ) ); |
|
| 252 | ||
| 253 | // $args can include anything. Only use the args defined in the query_var_defaults to compute the key. |
|
| 254 | $key = md5( serialize( wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ) ) ); |
|
| 255 | $last_changed = wp_cache_get_last_changed( 'sites' ); |
|
| 256 | ||
| 257 | $cache_key = "get_sites:$key:$last_changed"; |
|
| 258 | $cache_value = wp_cache_get( $cache_key, 'sites' ); |
|
| 259 | ||
| 260 | if ( false === $cache_value ) { |
|
| 261 | $site_ids = $this->get_site_ids(); |
|
| 262 | if ( $site_ids ) { |
|
| 263 | $this->set_found_sites(); |
|
| 264 | } |
|
| 265 | ||
| 266 | $cache_value = array( |
|
| 267 | 'site_ids' => $site_ids, |
|
| 268 | 'found_sites' => $this->found_sites, |
|
| 269 | ); |
|
| 270 | wp_cache_add( $cache_key, $cache_value, 'sites' ); |
|
| 271 | } else { |
|
| 272 | $site_ids = $cache_value['site_ids']; |
|
| 273 | $this->found_sites = $cache_value['found_sites']; |
|
| 274 | } |
|
| 275 | ||
| 276 | if ( $this->found_sites && $this->query_vars['number'] ) { |
|
| 277 | $this->max_num_pages = ceil( $this->found_sites / $this->query_vars['number'] ); |
|
| 278 | } |
|
| 279 | ||
| 280 | // If querying for a count only, there's nothing more to do. |
|
| 281 | if ( $this->query_vars['count'] ) { |
|
| 282 | // $site_ids is actually a count in this case. |
|
| 283 | return intval( $site_ids ); |
|
| 284 | } |
|
| 285 | ||
| 286 | $site_ids = array_map( 'intval', $site_ids ); |
|
| 287 | ||
| 288 | if ( 'ids' == $this->query_vars['fields'] ) { |
|
| 289 | $this->sites = $site_ids; |
|
| 290 | ||
| 291 | return $this->sites; |
|
| 292 | } |
|
| 293 | ||
| 294 | // Prime site network caches. |
|
| 295 | if ( $this->query_vars['update_site_cache'] ) { |
|
| 296 | _prime_site_caches( $site_ids ); |
|
| 297 | } |
|
| 298 | ||
| 299 | // Fetch full site objects from the primed cache. |
|
| 300 | $_sites = array(); |
|
| 301 | foreach ( $site_ids as $site_id ) { |
|
| 302 | if ( $_site = get_site( $site_id ) ) { |
|
| 303 | $_sites[] = $_site; |
|
| 304 | } |
|
| 305 | } |
|
| 306 | ||
| 307 | /** |
|
| 308 | * Filters the site query results. |
|
| 309 | * |
|
| 310 | * @since 4.6.0 |
|
| 311 | * |
|
| 312 | * @param array $results An array of sites. |
|
| 313 | * @param WP_Site_Query &$this Current instance of WP_Site_Query, passed by reference. |
|
| 314 | */ |
|
| 315 | $_sites = apply_filters_ref_array( 'the_sites', array( $_sites, &$this ) ); |
|
| 316 | ||
| 317 | // Convert to WP_Site instances. |
|
| 318 | $this->sites = array_map( 'get_site', $_sites ); |
|
| 319 | ||
| 320 | return $this->sites; |
|
| 321 | } |
|
| 322 | ||
| 323 | /** |
|
| 324 | * Used internally to get a list of site IDs matching the query vars. |
|