WordPress.org

Make WordPress Core

Ticket #14511: 14511_offset.diff

File 14511_offset.diff, 2.9 KB (added by jamescollins, 7 years ago)
  • src/wp-includes/ms-functions.php

     
    20072007 *     @type int       'spam'       Retrieve spam or non-spam sites. Default null, for any.
    20082008 *     @type int       'deleted'    Retrieve deleted or non-deleted sites. Default null, for any.
    20092009 *     @type int       'limit'      Number of sites to limit the query to. Default 100.
     2010 *     @type int       'offset'     Retrieve sites, excluding the first x sites. Used in combination with the limit parameter. Default 0.
    20102011 * }
    20112012 *
    20122013 * @return array An array of site data
     
    20252026                'spam'       => null,
    20262027                'deleted'    => null,
    20272028                'limit'      => 100,
     2029                'offset'      => 0,
    20282030        );
    20292031
    20302032        $args = wp_parse_args( $args, $defaults );
     
    20522054        if ( isset( $args['deleted'] ) )
    20532055                $query .= $wpdb->prepare( "AND deleted = %d ", $args['deleted'] );
    20542056
    2055         if ( isset( $args['limit'] ) )
    2056                 $query .= $wpdb->prepare( "LIMIT %d ", $args['limit'] );
     2057        if ( isset( $args['limit'] ) && intval( $args['limit'] ) > 0 ) {
     2058                if ( isset( $args['offset'] ) && intval( $args['offset'] ) > 0 ) {
     2059                        $query .= $wpdb->prepare( "LIMIT %d , %d ", $args['offset'], $args['limit'] );
     2060                } else {
     2061                        $query .= $wpdb->prepare( "LIMIT %d ", $args['limit'] );
     2062                }
     2063        }
    20572064
    20582065        $site_results = $wpdb->get_results( $query, ARRAY_A );
    20592066
  • tests/phpunit/tests/ms.php

     
    10331033         * @ticket 14511
    10341034         */
    10351035        function test_wp_get_sites() {
    1036                 global $wpdb;
    10371036                $this->factory->blog->create_many( 2, array( 'site_id' => 2, 'meta' => array( 'public' => 1 ) ) );
    10381037                $this->factory->blog->create_many( 3, array( 'site_id' => 3, 'meta' => array( 'public' => 0 ) ) );
    10391038
     
    10691068        }
    10701069
    10711070        /**
     1071         * @ticket 14511
     1072         */
     1073        function test_wp_get_sites_limit_offset() {
     1074                // Create 4 more sites (in addition to the default one)
     1075                $this->factory->blog->create_many( 4, array( 'meta' => array( 'public' => 1 ) ) );
     1076
     1077                // Expect all 5 sites when no limit/offset is specified
     1078                $this->assertCount( 5, wp_get_sites() );
     1079
     1080                // Expect first 2 sites when using limit
     1081                $this->assertCount( 2, wp_get_sites( array( 'limit' => 2 ) ) );
     1082
     1083                // Expect only the last 3 sites when using offset of 2 (limit will default to 100)
     1084                $this->assertCount( 3, wp_get_sites( array( 'offset' => 2 ) ) );
     1085
     1086                // Expect only the last 1 site when using offset of 4 and limit of 2
     1087                $this->assertCount( 1, wp_get_sites( array( 'limit' => 2, 'offset' => 4 ) ) );
     1088
     1089                // Expect 0 sites when using an offset larger than the number of sites
     1090                $this->assertCount( 0, wp_get_sites( array( 'offset' => 20 ) ) );
     1091        }
     1092
     1093        /**
    10721094         * Test the 'archived' argument for wp_get_sites().
    10731095         *
    10741096         * archived is an ENUM, not an integer field.