Make WordPress Core

Changeset 34569


Ignore:
Timestamp:
09/26/2015 02:24:17 AM (9 years ago)
Author:
wonderboymusic
Message:

Comments: in WP_Comment::get_children(), accept an array so that the values for format, status, hierarchical, and orderby can be passed, instead of just format. The defaults for get_comments() include status = 'all' and orderby = '' - which is no bueno.

For threaded comments, we need comments to be retrieved within bounds, so logged-out users don't see unmoderated comments on the front end, etc.

Updates unit tests.

See #8071.

Location:
trunk
Files:
3 edited

Legend:

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

    r34561 r34569  
    228228     * @access public
    229229     *
    230      * @param string $format Return value format. 'tree' for a hierarchical tree, 'flat' for a flattened array.
    231      *                       Default 'tree'.
     230     * @param array $args {
     231     *     Array of arguments used to pass to get_comments() and determine format.
     232     *
     233     *     @type string $format        Return value format. 'tree' for a hierarchical tree, 'flat' for a flattened array.
     234     *                                 Default 'tree'.
     235     *     @type string $status        Comment status to limit results by. Accepts 'hold' (`comment_status=0`),
     236     *                                 'approve' (`comment_status=1`), 'all', or a custom comment status.
     237     *                                 Default 'all'.
     238     *     @type string $hierarchical  Whether to include comment descendants in the results.
     239     *                                 'threaded' returns a tree, with each comment's children
     240     *                                 stored in a `children` property on the `WP_Comment` object.
     241     *                                 'flat' returns a flat array of found comments plus their children.
     242     *                                 Pass `false` to leave out descendants.
     243     *                                 The parameter is ignored (forced to `false`) when `$fields` is 'ids' or 'counts'.
     244     *                                 Accepts 'threaded', 'flat', or false. Default: 'threaded'.
     245     *     @type string|array $orderby Comment status or array of statuses. To use 'meta_value'
     246     *                                 or 'meta_value_num', `$meta_key` must also be defined.
     247     *                                 To sort by a specific `$meta_query` clause, use that
     248     *                                 clause's array key. Accepts 'comment_agent',
     249     *                                 'comment_approved', 'comment_author',
     250     *                                 'comment_author_email', 'comment_author_IP',
     251     *                                 'comment_author_url', 'comment_content', 'comment_date',
     252     *                                 'comment_date_gmt', 'comment_ID', 'comment_karma',
     253     *                                 'comment_parent', 'comment_post_ID', 'comment_type',
     254     *                                 'user_id', 'comment__in', 'meta_value', 'meta_value_num',
     255     *                                 the value of $meta_key, and the array keys of
     256     *                                 `$meta_query`. Also accepts false, an empty array, or
     257     *                                 'none' to disable `ORDER BY` clause.
     258     * }
    232259     * @return array Array of `WP_Comment` objects.
    233260     */
    234     public function get_children( $format = 'tree' ) {
     261    public function get_children( $args = array() ) {
     262        $defaults = array(
     263            'format' => 'tree',
     264            'status' => 'all',
     265            'hierarchical' => 'threaded',
     266            'orderby' => '',
     267        );
     268
     269        $_args = wp_parse_args( $args, $defaults );
     270        $_args['parent'] = $this->comment_ID;
     271
    235272        if ( is_null( $this->children ) ) {
    236             $this->children = get_comments( array(
    237                 'parent' => $this->comment_ID,
    238                 'hierarchical' => 'threaded',
    239             ) );
    240         }
    241 
    242         if ( 'flat' === $format ) {
     273            $this->children = get_comments( $_args );
     274        }
     275
     276        if ( 'flat' === $_args['format'] ) {
    243277            $children = array();
    244278            foreach ( $this->children as $child ) {
    245                 $children = array_merge( $children, array( $child ), $child->get_children( 'flat' ) );
     279                $child_args = $_args;
     280                $child_args['format'] = 'flat';
     281                // get_children() resets this value automatically.
     282                unset( $child_args['parent'] );
     283
     284                $children = array_merge( $children, array( $child ), $child->get_children( $child_args ) );
    246285            }
    247286        } else {
  • trunk/src/wp-includes/comment-template.php

    r34561 r34569  
    13081308    $comments_flat = array();
    13091309    foreach ( $_comments as $_comment ) {
    1310         $comments_flat = array_merge( $comments_flat, array( $_comment ), $_comment->get_children( 'flat' ) );
     1310        $comments_flat = array_merge( $comments_flat, array( $_comment ), $_comment->get_children( array(
     1311            'format' => 'flat',
     1312            'status' => $comment_args['status'],
     1313            'orderby' => $comment_args['orderby']
     1314        ) ) );
    13111315    }
    13121316
  • trunk/tests/phpunit/tests/comment/query.php

    r34550 r34569  
    20242024        ) );
    20252025
    2026         $q = new WP_Comment_Query( array(
    2027             'post_id' => $this->post_id,
     2026        $args = array(
    20282027            'hierarchical' => 'threaded',
    20292028            'orderby' => 'comment_ID',
    20302029            'order' => 'ASC',
    2031         ) );
     2030        );
     2031
     2032        $query_args = array_merge( $args, array(
     2033            'post_id' => $this->post_id,
     2034        ) );
     2035
     2036        $q = new WP_Comment_Query( $query_args );
    20322037
    20332038        // Top-level comments.
     
    20352040
    20362041        // Direct descendants of $c1.
    2037         $this->assertEqualSets( array( $c2, $c4 ), array_values( wp_list_pluck( $q->comments[ $c1 ]->get_children(), 'comment_ID' ) ) );
     2042        $this->assertEqualSets( array( $c2, $c4 ), array_values( wp_list_pluck( $q->comments[ $c1 ]->get_children( $args ), 'comment_ID' ) ) );
    20382043
    20392044        // Direct descendants of $c2.
    2040         $this->assertEqualSets( array( $c3 ), array_values( wp_list_pluck( $q->comments[ $c1 ]->get_child( $c2 )->get_children(), 'comment_ID' ) ) );
     2045        $this->assertEqualSets( array( $c3 ), array_values( wp_list_pluck( $q->comments[ $c1 ]->get_child( $c2 )->get_children( $args ), 'comment_ID' ) ) );
    20412046
    20422047        // Direct descendants of $c5.
    2043         $this->assertEqualSets( array( $c6 ), array_values( wp_list_pluck( $q->comments[ $c5 ]->get_children(), 'comment_ID' ) ) );
     2048        $this->assertEqualSets( array( $c6 ), array_values( wp_list_pluck( $q->comments[ $c5 ]->get_children( $args ), 'comment_ID' ) ) );
     2049    }
     2050
     2051    /**
     2052     * @ticket 8071
     2053     */
     2054    public function test_hierarchical_threaded_approved() {
     2055        $c1 = $this->factory->comment->create( array(
     2056            'comment_post_ID' => $this->post_id,
     2057            'comment_approved' => '1',
     2058        ) );
     2059
     2060        $c2 = $this->factory->comment->create( array(
     2061            'comment_post_ID' => $this->post_id,
     2062            'comment_approved' => '1',
     2063            'comment_parent' => $c1,
     2064        ) );
     2065
     2066        $c3 = $this->factory->comment->create( array(
     2067            'comment_post_ID' => $this->post_id,
     2068            'comment_approved' => '0',
     2069            'comment_parent' => $c2,
     2070        ) );
     2071
     2072        $c4 = $this->factory->comment->create( array(
     2073            'comment_post_ID' => $this->post_id,
     2074            'comment_approved' => '1',
     2075            'comment_parent' => $c1,
     2076        ) );
     2077
     2078        $c5 = $this->factory->comment->create( array(
     2079            'comment_post_ID' => $this->post_id,
     2080            'comment_approved' => '1',
     2081        ) );
     2082
     2083        $this->factory->comment->create( array(
     2084            'comment_post_ID' => $this->post_id,
     2085            'comment_approved' => '1',
     2086            'comment_parent' => $c5,
     2087        ) );
     2088
     2089        $args = array(
     2090            'hierarchical' => 'threaded',
     2091            'status' => 'approve',
     2092            'orderby' => 'comment_ID',
     2093            'order' => 'ASC',
     2094        );
     2095
     2096        $query_args = array_merge( $args, array(
     2097            'post_id' => $this->post_id,
     2098        ) );
     2099
     2100        $q = new WP_Comment_Query( $query_args );
     2101
     2102        // Top-level comments.
     2103        $this->assertEqualSets( array( $c1, $c5 ), array_values( wp_list_pluck( $q->comments, 'comment_ID' ) ) );
     2104
     2105        // Direct descendants of $c1.
     2106        $this->assertEqualSets( array( $c2, $c4 ), array_values( wp_list_pluck( $q->comments[ $c1 ]->get_children( $args ), 'comment_ID' ) ) );
     2107
     2108        // Direct descendants of $c2.
     2109        $this->assertEqualSets( array(), array_values( wp_list_pluck( $q->comments[ $c1 ]->get_child( $c2 )->get_children( $args ), 'comment_ID' ) ) );
    20442110    }
    20452111}
Note: See TracChangeset for help on using the changeset viewer.