Make WordPress Core

Changeset 36381


Ignore:
Timestamp:
01/22/2016 08:19:49 PM (11 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.