我注意到默认的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
? 那么,防止相同的评论从数据库中被抓取两次呢?
最合适的回答,由SO网友:Otto 整理而成
在运行普通查询后,您是否确实发现wp查询对象中存在任何真实注释?
如果您在wp查询类中检查代码。php中,您应该发现,只有在查询“注释提要”时,注释字段才会填充注释。
在正常操作中,注释不是通过WP\\u查询检索的,而是通过WP\\u Comment\\u查询检索的,在主题调用comments\\u template()函数之前,不会发生这种情况。
因此,您可以使用“comments\\u template\\u query\\u args”过滤器来过滤传递给该类的参数,然后再将注释显示在页面上。这不会影响注释提要,因为它们确实由主WP\\U查询填充,但仅针对注释提要案例。