Make WordPress Core

Changeset 49256


Ignore:
Timestamp:
10/20/2020 08:09:39 PM (4 years ago)
Author:
SergeyBiryukov
Message:

Comments: Add a filter for top level comments query arguments in comments_template().

Props hellofromTonya, Howdy_McGee, garrett-eclipse, davidbaumwald, thomaslhotta.
Fixes #38074.

Location:
trunk
Files:
2 edited

Legend:

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

    r49193 r49256  
    14351435            }
    14361436
     1437            /**
     1438             * Filters the arguments used in the top level comments query.
     1439             *
     1440             * @since 5.6.0
     1441             *
     1442             * @see WP_Comment_Query::__construct()
     1443             *
     1444             * @param array $top_level_args {
     1445             *     The top level query arguments for the comments template.
     1446             *
     1447             *     @type bool         $count   Whether to return a comment count.
     1448             *     @type string|array $orderby The field(s) to order by.
     1449             *     @type int          $post_id The post ID.
     1450             *     @type string|array $status  The comment status to limit results by.
     1451             * }
     1452             */
     1453            $top_level_args = apply_filters( 'comments_template_top_level_query_args', $top_level_args );
     1454
    14371455            $top_level_count = $top_level_query->query( $top_level_args );
    14381456
     
    14641482     * }
    14651483     */
    1466     $comment_args  = apply_filters( 'comments_template_query_args', $comment_args );
     1484    $comment_args = apply_filters( 'comments_template_query_args', $comment_args );
     1485
    14671486    $comment_query = new WP_Comment_Query( $comment_args );
    14681487    $_comments     = $comment_query->comments;
  • trunk/tests/phpunit/tests/comment/commentsTemplate.php

    r46586 r49256  
    961961        $this->assertSame( array( $comment_3 ), $found_cids );
    962962    }
     963
     964    /**
     965     * @ticket 38074
     966     * @dataProvider data_comments_template_top_level_query_args
     967     *
     968     * @param array $expected             Array of expected values.
     969     * @param array $query_args           Args for the 'comments_template_query_args' filter.
     970     * @param array $top_level_query_args Args for the 'comments_template_top_level_query_args' filter.
     971     */
     972    public function test_comments_template_top_level_query_args( $expected, $query_args, $top_level_query_args ) {
     973        $now         = time();
     974        $offset      = 0;
     975        $p           = self::factory()->post->create();
     976        $comment_ids = array();
     977
     978        for ( $num = 1; $num <= 6; $num++ ) {
     979            $comment_ids[ $num ] = self::factory()->comment->create(
     980                array(
     981                    'comment_post_ID'  => $p,
     982                    'comment_content'  => "{$num}",
     983                    'comment_date_gmt' => gmdate( 'Y-m-d H:i:s', $now - 100 * $num ),
     984                )
     985            );
     986            add_comment_meta( $comment_ids[ $num ], 'featured', $num > 3 ? '1' : '0' );
     987        }
     988
     989        update_option( 'comment_order', 'asc' );
     990        update_option( 'comments_per_page', 3 );
     991        update_option( 'page_comments', 1 );
     992        update_option( 'default_comments_page', 'newest' );
     993
     994        add_filter(
     995            'comments_template_query_args',
     996            function ( $args ) use ( &$offset, $query_args ) {
     997                $offset = $args['offset'];
     998
     999                return array_merge( $args, $query_args );
     1000            }
     1001        );
     1002
     1003        if ( ! empty( $top_level_query_args ) ) {
     1004            add_filter(
     1005                'comments_template_top_level_query_args',
     1006                function ( $args ) use ( $top_level_query_args ) {
     1007                    return array_merge( $args, $top_level_query_args );
     1008                }
     1009            );
     1010        }
     1011
     1012        $this->go_to( get_permalink( $p ) );
     1013
     1014        $found = get_echo( 'comments_template' );
     1015        preg_match_all( '/id="comment-([0-9]+)"/', $found, $matches );
     1016
     1017        $expected_ids = array();
     1018        foreach ( $expected['ids'] as $index ) {
     1019            $expected_ids[] = $comment_ids[ $index ];
     1020        }
     1021
     1022        $this->assertSame( $expected_ids, array_map( 'intval', $matches[1] ) );
     1023        $this->assertEquals( $expected['offset'], $offset );
     1024    }
     1025
     1026    public function data_comments_template_top_level_query_args() {
     1027        return array(
     1028            array(
     1029                array(
     1030                    'ids'    => array(),
     1031                    'offset' => 3,
     1032                ),
     1033                array(
     1034                    'meta_key'   => 'featured',
     1035                    'meta_value' => '1',
     1036                ),
     1037                array(),
     1038            ),
     1039            array(
     1040                array(
     1041                    'ids'    => array(),
     1042                    'offset' => 3,
     1043                ),
     1044                array(
     1045                    'order'      => 'DESC',
     1046                    'meta_key'   => 'featured',
     1047                    'meta_value' => '0',
     1048                ),
     1049                array(),
     1050            ),
     1051            array(
     1052                array(
     1053                    'ids'    => array( 6, 5, 4 ),
     1054                    'offset' => 0,
     1055                ),
     1056                array(
     1057                    'meta_key'   => 'featured',
     1058                    'meta_value' => '1',
     1059                ),
     1060                array(
     1061                    'meta_key'   => 'featured',
     1062                    'meta_value' => '1',
     1063                ),
     1064            ),
     1065            array(
     1066                array(
     1067                    'ids'    => array( 4, 5, 6 ),
     1068                    'offset' => 0,
     1069                ),
     1070                array(
     1071                    'order'      => 'DESC',
     1072                    'meta_key'   => 'featured',
     1073                    'meta_value' => '1',
     1074                ),
     1075                array(
     1076                    'order'      => 'DESC',
     1077                    'meta_key'   => 'featured',
     1078                    'meta_value' => '1',
     1079                ),
     1080            ),
     1081        );
     1082    }
    9631083}
Note: See TracChangeset for help on using the changeset viewer.