仅显示可以评论的帖子

时间:2016-01-12 作者:benutzerfreund

我有一个pre\\u get\\u posts过滤器,可以在主页上显示排除某些帖子。但我不能排除那些因评论而关闭的帖子。我该怎么做?

我拥有的是:

function wp_filter_pre_get_posts( $query ) {
// Only modify when on homepage & only the main query
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'comment_status\', \'open\' );
        $query->set( \'tag__not_in\', \'188\' );
        $query->set( \'posts_per_page\', \'3\' );
    }
}
add_filter( \'pre_get_posts\', \'wp_filter_pre_get_posts\' );
将该帖子从188类中排除可以,但将带有封闭评论的帖子排除在外则不行。有什么提示吗?

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

因为comment_status 不是内置查询参数,但您可以轻松实现它:

function wpse_214323_query_by_comment_status( $where, $wp_query ) {
    global $wpdb;

    if ( ! empty( $wp_query->query_vars[\'comment_status\'] ) ) {
        $status = $wp_query->query_vars[\'comment_status\'];

        if ( $status !== \'open\' )
            $status = \'closed\';

        $where .= " AND $wpdb->posts.comment_status = \'$status\'";
    }

    return $where;
}

add_filter( \'posts_where\', \'wpse_214323_query_by_comment_status\', 10, 2 );
除了使用现有代码之外,现在可以查询\'comment_status\' => \'open/closed\'