Make WordPress Core

Changeset 41287


Ignore:
Timestamp:
08/21/2017 03:34:19 PM (7 years ago)
Author:
boonebgorges
Message:

Introduce paged argument to WP_Comment_Query.

Using paged with number allows developers to request
paginated comment results without having to do a manual offset
calculation.

Props AdamWills.
Fixes #38268.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-comment-query.php

    r41215 r41287  
    141141     * @since 4.5.0 Introduced the `$author_url` argument.
    142142     * @since 4.6.0 Introduced the `$cache_domain` argument.
     143     * @since 4.9.0 Introduced the `$paged` argument.
    143144     *
    144145     * @param string|array $query {
     
    171172     *     @type int          $number                    Maximum number of comments to retrieve.
    172173     *                                                   Default empty (no limit).
     174     *     @type int          $paged                     When used with $number, defines the page of results to return.
     175     *                                                   When used with $offset, $offset takes precedence. Default 1.
    173176     *     @type int          $offset                    Number of comments to offset the query. Used to build
    174177     *                                                   LIMIT clause. Default 0.
     
    264267            'orderby' => '',
    265268            'order' => 'DESC',
     269            'paged' => 1,
    266270            'parent' => '',
    267271            'parent__in' => '',
     
    629633        $number = absint( $this->query_vars['number'] );
    630634        $offset = absint( $this->query_vars['offset'] );
     635        $paged = absint( $this->query_vars['paged'] );
    631636
    632637        if ( ! empty( $number ) ) {
     
    634639                $limits = 'LIMIT ' . $offset . ',' . $number;
    635640            } else {
    636                 $limits = 'LIMIT ' . $number;
     641                $limits = 'LIMIT ' . ( $number * ( $paged - 1 ) ) . ',' . $number;
    637642            }
    638643        }
  • trunk/tests/phpunit/tests/comment/query.php

    r41190 r41287  
    15621562    }
    15631563
     1564    /**
     1565     * @ticket 38268
     1566     */
     1567    public function test_paged() {
     1568        $now = time();
     1569
     1570        $c1 = self::factory()->comment->create( array(
     1571            'comment_post_ID' => self::$post_id,
     1572            'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 50 ),
     1573        ) );
     1574        $c2 = self::factory()->comment->create( array(
     1575            'comment_post_ID' => self::$post_id,
     1576            'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 40 ),
     1577        ) );
     1578        $c3 = self::factory()->comment->create( array(
     1579            'comment_post_ID' => self::$post_id,
     1580            'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 30 ),
     1581        ) );
     1582        $c4 = self::factory()->comment->create( array(
     1583            'comment_post_ID' => self::$post_id,
     1584            'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 20 ),
     1585        ) );
     1586
     1587        $query = new WP_Comment_Query();
     1588        $found = $query->query( array(
     1589            'paged' => 2,
     1590            'number' => 2,
     1591            'orderby' => 'comment_date_gmt',
     1592            'order' => 'DESC',
     1593            'fields' => 'ids',
     1594        ) );
     1595
     1596        $expected = array( $c2, $c1 );
     1597        $this->assertSame( $expected, $found );
     1598    }
     1599
     1600    /**
     1601     * @ticket 38268
     1602     */
     1603    public function test_offset_should_take_precedence_over_paged() {
     1604        $now = time();
     1605
     1606        $c1 = self::factory()->comment->create( array(
     1607            'comment_post_ID' => self::$post_id,
     1608            'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 50 ),
     1609        ) );
     1610        $c2 = self::factory()->comment->create( array(
     1611            'comment_post_ID' => self::$post_id,
     1612            'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 40 ),
     1613        ) );
     1614        $c3 = self::factory()->comment->create( array(
     1615            'comment_post_ID' => self::$post_id,
     1616            'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 30 ),
     1617        ) );
     1618        $c4 = self::factory()->comment->create( array(
     1619            'comment_post_ID' => self::$post_id,
     1620            'comment_date_gmt' => date( 'Y-m-d H:i:s', $now - 20 ),
     1621        ) );
     1622
     1623        $query = new WP_Comment_Query();
     1624        $found = $query->query( array(
     1625            'paged' => 2,
     1626            'offset' => 1,
     1627            'number' => 2,
     1628            'orderby' => 'comment_date_gmt',
     1629            'order' => 'DESC',
     1630            'fields' => 'ids',
     1631        ) );
     1632
     1633        $expected = array( $c3, $c2 );
     1634
     1635        $this->assertSame( $expected, $found );
     1636    }
     1637
    15641638    public function test_post_type_single_value() {
    15651639        register_post_type( 'post-type-1' );
Note: See TracChangeset for help on using the changeset viewer.