WordPress.org

Make WordPress Core

Ticket #35697: 35697.diff

File 35697.diff, 2.2 KB (added by flixos90, 6 years ago)

patch with a possible implementation

  • src/wp-includes/ms-functions.php

     
    24442444                'deleted'    => null,
    24452445                'limit'      => 100,
    24462446                'offset'     => 0,
     2447                'fields'     => 'all',
    24472448        );
    24482449
    24492450        $args = wp_parse_args( $args, $defaults );
    24502451
    2451         $query = "SELECT * FROM $wpdb->blogs WHERE 1=1 ";
     2452        $selects = array();
     2453        switch ( $args['fields'] ) {
     2454                case 'all':
     2455                        $selects = array( '*' );
     2456                        break;
     2457                case 'ids':
     2458                        $selects = array( 'blog_id' );
     2459                        break;
     2460                case 'count':
     2461                        $selects = array( 'COUNT(*)' );
     2462                        break;
     2463                case 'id=>domain':
     2464                        $selects = array( 'blog_id', 'domain' );
     2465                        break;
     2466                case 'id=>path':
     2467                        $selects = array( 'blog_id', 'path' );
     2468                        break;
     2469                case 'id=>network_id':
     2470                        $selects = array( 'blog_id', 'site_id' );
     2471                        break;
     2472        }
    24522473
     2474        $fields = implode( ', ', $selects );
     2475
     2476        $query = "SELECT $fields FROM $wpdb->blogs WHERE 1=1 ";
     2477
    24532478        if ( isset( $args['network_id'] ) && ( is_array( $args['network_id'] ) || is_numeric( $args['network_id'] ) ) ) {
    24542479                $network_ids = implode( ',', wp_parse_id_list( $args['network_id'] ) );
    24552480                $query .= "AND site_id IN ($network_ids) ";
     
    24772502                        $query .= $wpdb->prepare( "LIMIT %d ", $args['limit'] );
    24782503        }
    24792504
     2505        if ( 'count' === $args['fields'] ) {
     2506                return $wpdb->get_var( $query );
     2507        }
     2508
    24802509        $site_results = $wpdb->get_results( $query, ARRAY_A );
    24812510
     2511        $_site_results = array();
     2512        if ( 'id=>domain' === $args['fields'] ) {
     2513                foreach ( $site_results as $site ) {
     2514                        $_site_results[ $site['blog_id'] ] = $site['domain'];
     2515                }
     2516        } elseif ( 'id=>path' === $args['fields'] ) {
     2517                foreach ( $site_results as $site ) {
     2518                        $_site_results[ $site['blog_id'] ] = $site['path'];
     2519                }
     2520        } elseif ( 'id=>network_id' === $args['fields'] ) {
     2521                foreach ( $site_results as $site ) {
     2522                        $_site_results[ $site['blog_id'] ] = $site['site_id'];
     2523                }
     2524        } elseif ( 'ids' === $args['fields'] ) {
     2525                foreach ( $site_results as $site ) {
     2526                        $_site_results[] = $site['blog_id'];
     2527                }
     2528        }
     2529
     2530        if ( ! empty( $_site_results ) ) {
     2531                $site_results = $_site_results;
     2532        }
     2533
    24822534        return $site_results;
    24832535}
    24842536