WordPress.org

Make WordPress Core

Ticket #31148: 31148.4.patch

File 31148.4.patch, 6.1 KB (added by spacedmonkey, 6 years ago)
  • wp-includes/ms-functions.php

    diff --git a/wp-includes/ms-functions.php b/wp-includes/ms-functions.php
    index ecb6a1f..dc149ca 100644
    a b function wp_is_large_network( $using = 'sites' ) { 
    24162416 *
    24172417 *     @type int|array $network_id A network ID or array of network IDs. Set to null to retrieve sites
    24182418 *                                 from all networks. Defaults to current network ID.
     2419 *     @type int|array $site_id   A site ID or array of site IDs. Set to null to retrieve all sites. Default null, for any.
    24192420 *     @type int       $public     Retrieve public or non-public sites. Default null, for any.
    24202421 *     @type int       $archived   Retrieve archived or non-archived sites. Default null, for any.
    24212422 *     @type int       $mature     Retrieve mature or non-mature sites. Default null, for any.
    24222423 *     @type int       $spam       Retrieve spam or non-spam sites. Default null, for any.
    24232424 *     @type int       $deleted    Retrieve deleted or non-deleted sites. Default null, for any.
     2425 *     @type string|array $domain  A domain or array of domains to search for. Set to null to retrieve all sites. Default null, for any.
     2426 *     @type string|array $path    A path or array of paths to search for. Set to null to retrieve all sites. Default null, for any.
    24242427 *     @type int       $limit      Number of sites to limit the query to. Default 100.
    24252428 *     @type int       $offset     Exclude the first x sites. Used in combination with the $limit parameter. Default 0.
     2429 *     @type string    $orderby    Field(s) to order sites by. Accepts site fields ('ids', 'domain', 'last_updated', registered', 'path').
     2430 *                                 Defaults to 'none'.
     2431 *     @type string    $order      Whether to order terms in ascending or descending order.
     2432 *                                 Accepts 'ASC' (ascending) or 'DESC' (descending).
     2433 *                                 Default 'ASC'.
     2434 *         @type string    $fields     Which fields to return. Single field or all fields (string).
     2435 *                                 Default all fields. Accepts 'all', 'ids', 'domain'.
    24262436 * }
    24272437 * @return array An empty array if the install is considered "large" via wp_is_large_network(). Otherwise,
    24282438 *               an associative array of site data arrays, each containing the site (network) ID, blog ID,
    function wp_is_large_network( $using = 'sites' ) { 
    24322442function wp_get_sites( $args = array() ) {
    24332443        global $wpdb;
    24342444
    2435         if ( wp_is_large_network() )
    2436                 return array();
    2437 
    24382445        $defaults = array(
    24392446                'network_id' => $wpdb->siteid,
     2447                'site_id'    => null,
    24402448                'public'     => null,
    24412449                'archived'   => null,
    24422450                'mature'     => null,
    24432451                'spam'       => null,
    24442452                'deleted'    => null,
     2453                'domain'     => null,
     2454                'path'       => null,
    24452455                'limit'      => 100,
    24462456                'offset'     => 0,
     2457                'order'      => 'ASC',
     2458                'orderby'    => 'none',
     2459                'fields'     => 'all',
    24472460        );
    24482461
    24492462        $args = wp_parse_args( $args, $defaults );
    24502463
    2451         $query = "SELECT * FROM $wpdb->blogs WHERE 1=1 ";
     2464        /**
     2465         * Filter whether to short-circuit the wp_get_sites() return.
     2466         *
     2467         * @since 4.6.0
     2468         *
     2469         * @see wp_get_sites()
     2470         *
     2471         * @param array       $site_results List of sites to short-circuit with. Default null.
     2472         * @param object      $args   An object containing wp_nav_menu() arguments.
     2473         */
     2474        $site_results = apply_filters( 'pre_wp_get_sites', null, $args );
     2475
     2476        if ( null !== $site_results ) {
     2477                return $site_results;
     2478        }
     2479
     2480        switch ( $args['fields'] ) {
     2481                case 'ids':
     2482                        $fields = "blog_id";
     2483                        break;
     2484                case 'domain':
     2485                        $fields = $args['fields'];
     2486                        break;
     2487                default:
     2488                        $fields = "*";
     2489                        break;
     2490        }
     2491
     2492        $query = "SELECT $fields FROM $wpdb->blogs WHERE 1=1 ";
    24522493
    24532494        if ( isset( $args['network_id'] ) && ( is_array( $args['network_id'] ) || is_numeric( $args['network_id'] ) ) ) {
    24542495                $network_ids = implode( ',', wp_parse_id_list( $args['network_id'] ) );
    24552496                $query .= "AND site_id IN ($network_ids) ";
    24562497        }
    24572498
    2458         if ( isset( $args['public'] ) )
     2499        if ( isset( $args['site_id'] ) && ( is_array( $args['site_id'] ) || is_numeric( $args['site_id'] ) ) ) {
     2500                $site_ids = implode( ',', wp_parse_id_list( $args['site_id'] ) );
     2501                $query .= "AND blog_id IN ($site_ids) ";
     2502        }
     2503
     2504        if ( isset( $args['path'] ) ) {
     2505                $paths        = (array) $args['path'];
     2506                $search_paths = "'" . implode( "', '", $wpdb->_escape( $paths ) ) . "'";
     2507                $query .= "AND path IN ($search_paths) ";
     2508        }
     2509
     2510        if ( isset( $args['domain'] ) ) {
     2511                $domains        = (array) $args['domain'];
     2512                $search_domains = "'" . implode( "', '", $wpdb->_escape( $domains ) ) . "'";
     2513                $query .= "AND domain IN ($search_domains) ";
     2514        }
     2515
     2516        if ( isset( $args['public'] ) ) {
    24592517                $query .= $wpdb->prepare( "AND public = %d ", $args['public'] );
     2518        }
    24602519
    2461         if ( isset( $args['archived'] ) )
     2520        if ( isset( $args['archived'] ) ) {
    24622521                $query .= $wpdb->prepare( "AND archived = %d ", $args['archived'] );
     2522        }
    24632523
    2464         if ( isset( $args['mature'] ) )
     2524        if ( isset( $args['mature'] ) ) {
    24652525                $query .= $wpdb->prepare( "AND mature = %d ", $args['mature'] );
     2526        }
    24662527
    2467         if ( isset( $args['spam'] ) )
     2528        if ( isset( $args['spam'] ) ) {
    24682529                $query .= $wpdb->prepare( "AND spam = %d ", $args['spam'] );
     2530        }
    24692531
    2470         if ( isset( $args['deleted'] ) )
     2532        if ( isset( $args['deleted'] ) ) {
    24712533                $query .= $wpdb->prepare( "AND deleted = %d ", $args['deleted'] );
     2534        }
     2535
     2536        $order = ( 'desc' == strtolower( $args['order'] ) ) ? 'DESC' : 'ASC';
     2537
     2538        switch ( $args['orderby'] ) {
     2539                case 'domain':
     2540                case 'last_updated':
     2541                case 'path':
     2542                case 'registered':
     2543                        $orderby = $args['orderby'];
     2544                        break;
     2545                case 'ids':
     2546                default:
     2547                        $orderby = "blog_id";
     2548                        break;
     2549        }
     2550        $query .= $wpdb->prepare( "ORDER BY %s %s", $orderby, $order );
    24722551
    24732552        if ( isset( $args['limit'] ) && $args['limit'] ) {
    2474                 if ( isset( $args['offset'] ) && $args['offset'] )
     2553                if ( isset( $args['offset'] ) && $args['offset'] ) {
    24752554                        $query .= $wpdb->prepare( "LIMIT %d , %d ", $args['offset'], $args['limit'] );
    2476                 else
     2555                } else {
    24772556                        $query .= $wpdb->prepare( "LIMIT %d ", $args['limit'] );
     2557                }
    24782558        }
    24792559
    2480         $site_results = $wpdb->get_results( $query, ARRAY_A );
     2560        if ( $fields == "*" ) {
     2561                $site_results = $wpdb->get_results( $query, ARRAY_A );
     2562        } else {
     2563                $site_results = $wpdb->get_col( $query );
     2564        }
    24812565
    24822566        return $site_results;
    24832567}