首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >您能在主查询之外使用pre_get_posts吗?

您能在主查询之外使用pre_get_posts吗?
EN

Stack Overflow用户
提问于 2016-09-12 18:36:08
回答 1查看 1K关注 0票数 0

我是WordPress的新手,最近学到了很多关于pre_get_posts的知识。我理解基本的概念,但在文档的一部分中我被绊倒了。

来自法典

类似地,如果在模板文件(例如,)__中使用它们,则它们将无法工作,因为它们是在查询完成后调用的。

如果不能在模板文件中使用它,这是否意味着它只适用于index.php?如果是这样的话,为什么在页面下面还有一个示例,其中使用pre_get_posts来更改Archive的显示方式?

我理解pre_get_posts (尤其是query_posts )的强大功能,但我很难找到如何在一个站点上多次使用它。我看到的一切都显示它只用于主循环一次。

任何指导都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-09-13 12:13:24

archive.phpcategory.php这样的文件就是WordPress所称的模板文件。正如文档所说,页面模板通常具有很高的特异性。这将解释为什么在调用模板文件之前已经初始化了查询,因此,pre_get_posts将忽略它在模板文件上的作用。

您可以在没有模板文件(如archive.phpcategory.php )的情况下显示存档,但是pre_get_posts实际上只是用于在主查询中调用。这意味着,如果将add_action('pre_get_posts', 'my_callback_function')添加到functions.php文件中,它将改变查询站点的范围。可以对回调中的特定页面类型进行筛选,如下所示:

代码语言:javascript
复制
function my_callback_function($query){

   // Only if page type is category
   if(is_category()){
       $query->set('posts_per_page', 7);
   }

   // Always except for search page types
   if(!is_search()){
       $query->set('posts_per_page', 4);
   }
}

这样就不需要调用pre_get_posts两次了。

如果要执行多个查询或指定archive.php查询,请使用WP_Query()实例。

更多细节

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39456639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档