是否从WP_QUERY对象中排除注释?

时间:2017-04-09 作者:Swen

我注意到默认的WP\\u查询对象还包含帖子的所有评论。

global $wp_query;

print_r($wp_query->comments);
// Prints an object containing all of a post\'s comments
据我所知,WordPress以某种方式将post查询和comments查询结合在一起WP_Query 对象,然后通过读取$wp_query->comments 对象

但是,我需要通过传递高级查询参数来查询注释并对其排序。所以我用WP_Comment_Query 创建一个新对象,按照我需要的顺序包含帖子的所有注释。

$args = array(      
    \'post_id\' => get_the_ID(),
    \'order\' => \'ASC\'
);

$comments_query = new WP_Comment_Query;
$comments = $comments_query->query($args);

print_r($comments);
// Prints an object containing all comments matching the query
但现在看来WP_Comment_Query 基本上让WordPress加载所有帖子的评论twice.

显然,从性能角度来看,这是不可取的,因为我实际上没有使用默认值WP_Query\'s comment对象以显示我的注释。

所以我想知道:有没有可能防止WP_Query 从获取帖子的评论,以便我以后可以使用WP_Comment_Query? 那么,防止相同的评论从数据库中被抓取两次呢?

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

在运行普通查询后,您是否确实发现wp查询对象中存在任何真实注释?

如果您在wp查询类中检查代码。php中,您应该发现,只有在查询“注释提要”时,注释字段才会填充注释。

在正常操作中,注释不是通过WP\\u查询检索的,而是通过WP\\u Comment\\u查询检索的,在主题调用comments\\u template()函数之前,不会发生这种情况。

因此,您可以使用“comments\\u template\\u query\\u args”过滤器来过滤传递给该类的参数,然后再将注释显示在页面上。这不会影响注释提要,因为它们确实由主WP\\U查询填充,但仅针对注释提要案例。