Make WordPress Core

Changeset 36381


Ignore:
Timestamp:
01/22/2016 08:19:49 PM (9 years ago)
Author:
boonebgorges
Message:

Allow comment query results to be limited to comments with comment_post_ID = 0.

Previously, this was not possible due to an overly broad empty() check.

Passing null, false, or '' to 'post_id', or omitting 'post_id'
altogether, will continue to return comments regardless of comment_post_ID,
as before. Passing 0 or '0' will limit results to comments with no
associated post.

Props danielbachhuber.
Fixes #35090.

Location:
trunk
Files:
2 edited

Legend:

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

    r36345 r36381  
    215215     *     @type int          $post_ID                   Currently unused.
    216216     *     @type int          $post_id                   Limit results to those affiliated with a given post ID.
    217      *                                                   Default 0.
     217     *                                                   Default null.
    218218     *     @type array        $post__in                  Array of post IDs to include affiliated comments for.
    219219     *                                                   Default empty.
     
    277277            'post_author__not_in' => '',
    278278            'post_ID' => '',
    279             'post_id' => 0,
     279            'post_id' => null,
    280280            'post__in' => '',
    281281            'post__not_in' => '',
     
    646646        }
    647647
    648         $post_id = absint( $this->query_vars['post_id'] );
    649         if ( ! empty( $post_id ) ) {
    650             $this->sql_clauses['where']['post_id'] = $wpdb->prepare( 'comment_post_ID = %d', $post_id );
     648        if ( strlen( $this->query_vars['post_id'] ) ) {
     649            $this->sql_clauses['where']['post_id'] = $wpdb->prepare( 'comment_post_ID = %d', $this->query_vars['post_id'] );
    651650        }
    652651
  • trunk/tests/phpunit/tests/comment/query.php

    r36346 r36381  
    3737    }
    3838
    39     public function test_query_post_id_0() {
    40         $c1 = self::factory()->comment->create( array( 'comment_post_ID' => self::$post_id, 'comment_approved' => '1' ) );
     39    /**
     40     * @ticket 35090
     41     */
     42    public function test_post_id_0_should_return_comments_with_no_parent() {
     43        $c1 = self::factory()->comment->create( array( 'comment_post_ID' => self::$post_id, 'comment_approved' => '1' ) );
     44        $c2 = self::factory()->comment->create( array( 'comment_post_ID' => 0, 'comment_approved' => '1' ) );
    4145
    4246        $q = new WP_Comment_Query();
     
    4650        ) );
    4751
    48         $this->assertEqualSets( array( $c1 ), $found );
     52        $this->assertEqualSets( array( $c2 ), $found );
     53    }
     54
     55    /**
     56     * @ticket 35090
     57     */
     58    public function test_post_id_string_0_should_return_comments_with_no_parent() {
     59        $c1 = self::factory()->comment->create( array( 'comment_post_ID' => self::$post_id, 'comment_approved' => '1' ) );
     60        $c2 = self::factory()->comment->create( array( 'comment_post_ID' => 0, 'comment_approved' => '1' ) );
     61
     62        $q = new WP_Comment_Query();
     63        $found = $q->query( array(
     64            'post_id' => '0',
     65            'fields' => 'ids',
     66        ) );
     67
     68        $this->assertEqualSets( array( $c2 ), $found );
     69    }
     70
     71    /**
     72     * @ticket 35090
     73     */
     74    public function test_post_id_null_should_be_ignored() {
     75        $c1 = self::factory()->comment->create( array( 'comment_post_ID' => self::$post_id, 'comment_approved' => '1' ) );
     76        $c2 = self::factory()->comment->create( array( 'comment_post_ID' => 0, 'comment_approved' => '1' ) );
     77
     78        $q = new WP_Comment_Query();
     79        $found = $q->query( array(
     80            'post_id' => null,
     81            'fields' => 'ids',
     82        ) );
     83
     84        $this->assertEqualSets( array( $c1, $c2 ), $found );
     85    }
     86
     87    /**
     88     * @ticket 35090
     89     */
     90    public function test_post_id_false_should_be_ignored() {
     91        $c1 = self::factory()->comment->create( array( 'comment_post_ID' => self::$post_id, 'comment_approved' => '1' ) );
     92        $c2 = self::factory()->comment->create( array( 'comment_post_ID' => 0, 'comment_approved' => '1' ) );
     93
     94        $q = new WP_Comment_Query();
     95        $found = $q->query( array(
     96            'post_id' => false,
     97            'fields' => 'ids',
     98        ) );
     99
     100        $this->assertEqualSets( array( $c1, $c2 ), $found );
     101    }
     102
     103    /**
     104     * @ticket 35090
     105     */
     106    public function test_post_id_empty_string_should_be_ignored() {
     107        $c1 = self::factory()->comment->create( array( 'comment_post_ID' => self::$post_id, 'comment_approved' => '1' ) );
     108        $c2 = self::factory()->comment->create( array( 'comment_post_ID' => 0, 'comment_approved' => '1' ) );
     109
     110        $q = new WP_Comment_Query();
     111        $found = $q->query( array(
     112            'post_id' => '',
     113            'fields' => 'ids',
     114        ) );
     115
     116        $this->assertEqualSets( array( $c1, $c2 ), $found );
    49117    }
    50118
Note: See TracChangeset for help on using the changeset viewer.