获取多个帖子的评论

时间:2012-06-13 作者:Francesco

我想得到一组帖子的所有评论(不仅仅是一篇帖子)。

我试过了

$comment_args = array(\'number\' => \'14\', \'post_id\' => \'10,20,30,40\'  );
    $comments = get_comments($comment_args);
    foreach($comments as $comment) ...
但不起作用。有什么想法吗?

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

这个\'post_id\' 在中转换为正整数WP_Comment_Query, 因此,您无法成功地将任何其他内容传递给get_comments().

你必须过滤\'comments_clauses\'. 在这里,您可以更改WHERE 要使用的子句comment_post_ID IN ( $ids ) 而不是comment_post_ID = $id.

我将使用静态类作为get_comments().

示例代码

/**
 * Query comments for multiple post IDs.
 */
class T5_Multipost_Comments
{
    /**
     * Post IDs, eg. array ( 1, 2, 40 )
     * @var array
     */
    protected static $post_ids = array ();

    /**
     * Called like get_comments.
     *
     * @param  array $args
     * @param  array $post_ids
     * @return array
     */
    public static function get( $args = array (), $post_ids = array () )
    {
        if ( array () !== $post_ids )
        {
            self::$post_ids = $post_ids;
            add_filter( \'comments_clauses\', array ( __CLASS__, \'filter_where_clause\' ) );
        }
        return get_comments( $args );
    }

    /**
     * Filter the comment query
     *
     * @param array $q Query parts, see WP_Comment_Query::query()
     *
     * @return array
     */
    public static function filter_where_clause( $q )
    {
        $ids       = implode( \', \', self::$post_ids );
        $_where_in = " AND comment_post_ID IN ( $ids )";

        if ( FALSE !== strpos( $q[\'where\'], \' AND comment_post_ID =\' ) )
        {
            $q[\'where\'] = preg_replace(
                \'~ AND comment_post_ID = \\d+~\',
                $_where_in,
                $q[\'where\']
            );
        }
        else
        {
            $q[\'where\'] .= $_where_in;
        }

        remove_filter( \'comments_clauses\', array ( __CLASS__, \'filter_where_clause\' ) );
        return $q;
    }
}
用法示例
$multi_comments = T5_Multipost_Comments::get(
    array ( \'number\' => \'14\' ), // comment args
    array ( 149, 564, 151 )     // post IDs
);
print \'<pre>\' . htmlspecialchars( print_r( $multi_comments, TRUE ) ) . \'</pre>\';

SO网友:EAMann

不幸地get_comments() 这样不太管用。如果指定帖子ID,该函数将仅返回该帖子的注释。post ID参数不接受多个ID。

但是,您可以编写一个函数来递归地从帖子数组中获取评论,并使用它:

get_comments_from_range( $post_ids ) {
    foreach( $post_ids as $post_id ) {
        $comment_collection[] = get_comments( array( \'post_id\' => $post_id ) );
    }

    return $comment_collection;
}

$comments = get_comments_from_range( array( \'10\', \'20\', \'30\', \'40\' ) );
一旦你的函数中有了数组,你就可以根据需要对它进行排序,并将其限制为14条左右的注释。。。这取决于你。

结束

相关推荐

Disable Comments Feed

我在一个私人网站上工作,那里需要隐藏评论。我知道如何从标题中删除注释提要,但是谁能给我一些关于如何完全禁用注释提要的说明呢。因为你所需要做的就是在单个帖子中添加/feed/然后你就可以看到评论feed了。我尝试创建feed-atom注释。php和feed-rss2-comments。php,但这仍然不起作用。