仅返回Wordpress中包含评论的帖子

时间:2014-08-20 09:47:20

标签: php wordpress wp-query add-filter

我很惊讶我在这个话题上找不到多少,也许我很困惑。

我正在创建评论的存档页面。我希望获得所有评论的帖子,我将列出帖子标题,然后使用wp_list_comments或WP评论查询列出该帖子的所有评论。

我的问题是如何过滤WP_Query(),这样我才能返回有评论的帖子。

我试图修改这种方法list posts with no comments - postpostmodern的答案,但我想做的恰恰相反。

这是功能:

function filter_comment_count( $sql ){
    global $wpdb;
    $comment_count = get_query_var( 'comment_count' );

    if( is_numeric($comment_count) )
        $sql .= $wpdb->prepare( " AND {$wpdb->posts}.comment_count != %d ", $comment_count);

    return $sql;
    }
add_filter( 'posts_where', 'filter_comment_count'  );

然后我试图在我的循环中使用它,这是摘录:

$args = array (
    'comment_count'  => '0'
    'pagination'     => true,
    'posts_per_page' => '10',
);

$the_query = new WP_Query($args); 
    while($the_query->have_posts()) : $the_query->the_post();  
        get_template_part( 'content', get_post_format() );
    endwhile;
wp_reset_postdata();

我觉得绊倒我的是AND {$wpdb->posts}.comment_count != %d我希望它返回comment_count不等于0或者是什么让我只能在WP_Query($args); <中获得包含评论的帖子/ p>

此外,我不确定将remove_filter( 'posts_where', 'filter_comment_count' );放在哪里?

我意识到有'orderby' => 'comment_count'但据我所知,这并没有完全帮助我的情况。

2 个答案:

答案 0 :(得分:1)

可能无法提供您想要的确切结果,也不能提高效率,但这是我能想到的:

在你的循环中,添加:

$comments = get_comments(array('post_id' => $post->ID));
if ($comments !== '' && !empty($comments)) {
// The rest.
}

这应该仅输出与其相关的评论的帖子。

编辑:

还有

    if( 0 < $post->comment_count ){

        // Output

    }

我从这里检索到的: https://wordpress.stackexchange.com/questions/125577/only-display-posts-with-comments

答案 1 :(得分:1)

老问题,但如果有人像我一样偶然发现了这一点,WordPress 4.9 向 WP_Query 添加了“comment_count”参数。

该值可以是您需要的评论数量的整数,也可以是一个数组,其中第一个参数是“值”,第二个参数是“比较”搜索运算符。

仅返回带有评论的帖子:

$args = array(
    'comment_count'  => array(
        'value'   => 0,
        'compare' => '>',
    ),
    'pagination'     => true,
    'posts_per_page' => 10,
);
$the_query = WP_Query( $args );

https://developer.wordpress.org/reference/classes/wp_query/#comment-parameters