Get all commenters on a post

时间:2021-06-28 作者:manik

我知道有几个类似的问题,但我找不到我想要的。我想把所有的评论都放到一个帖子上。但是,如果有一个评论者给出了不止一条评论,那么他不会被计算为两倍。我不想将它们单独显示为:

foreach($comments as$comment){//echo}

而是以数组形式获取它们。

我是这样尝试的。但这种方法仍然将拥有一条以上评论的评论者计算为两倍(与他自己的评论一样多)。

                    $args_user = array( \'role__in\' => array( \'author\', \'subscriber\' ),
                                        \'fields\' => \'ID\'
                                        );
                    $get_usersgroup = get_users($args_user);
                    $thepost_id = get_the_ID();
                    $comments_query = new WP_Comment_Query;
                    $comments = $comments_query->query( array(   
                                                        \'post_id\'    => $thepost_id,
                                                        \'author__in\'  => $get_usersgroup,
                                                        \'status\'     => \'approve\',
                                                        ) );
                    
                    $totalcommenters = count ( $comments );
非常感谢您的帮助!

2 个回复
最合适的回答,由SO网友:manik 整理而成

我通过以下方法获得了帖子中所有评论者的user\\u id数组:

$args_user = array( \'role__in\' => array( \'author\', \'subscriber\' ),
                                    \'fields\' => \'ID\'
                                    );
                $get_usersgroup = get_users($args_user);
                $thepost_id = get_the_ID();
                $comments_query = new WP_Comment_Query;
                $comments = $comments_query->query( array(   
                                                    \'post_id\'    => $thepost_id,
                                                    \'author__in\'  => $get_usersgroup,
                                                    \'status\'     => \'approve\',
                                                    ) );
                
                $all_commenters_id = array(); //literally this small part is make big effect to the results
                foreach($comments as $comment) :
                $all_commenters_id[] = $comment->user_id;
                endforeach;
                                            
                $unique_commenters = array_unique( $all_commenters_id );
                $total_unique_commenters = count ( $unique_commenters );
希望对有类似目标的人有用!

SO网友:Paul G.

我有点不清楚你到底在寻找什么样的最终数据。你说的是;数组形式;,但这还不够具体。

因此,根据您的代码片段,此代码将为您提供一个unique 评论者用户ID。

代码本质上与您的代码相同,但我将几个部分组合在一起,因为它们不需要是自己单独的PHP语句——它们可以直接放入注释查询中。

$cq = new \\WP_Comment_Query();
$comments = $cq->query(
    array(
        \'post_id\'    => get_the_ID(),
        \'status\'     => \'approve\',
        \'author__in\' => get_users(
            array(
                \'role__in\' => [ \'author\', \'subscriber\' ],
                \'fields\'   => \'ID\'
            )
        )
    )
);

$all_comment_user_ids = array_map( function ( $comment ) {
    return $comment[ \'user_id\' ];
}, $comments );

$total_comments = count( $comments );
$unique_commenters = array_unique( $all_comment_user_ids );
$total_unique_commenters = count( $unique_commenters );
您的查询本身很好。。。您只需对结果进行后期处理。

array_map 检查每个注释结果并拉出user_id 并创建一个仅包含用户ID的新数组array_unique 将数组减少为唯一值