$wp_query initiation?

时间:2017-05-03 作者:TurtleTread

我想知道WordPress什么时候启动它的主查询来设置全局$wp_query 并使我们能够使用has_posts()the_post() 功能。如果我使用存档模板创建页面,它如何知道如何设置查询?

我在看档案。WordPress默认主题之一中的php。他们有一个归档页,但它只调用get_header()has_posts(), 因此,这意味着已经设置了查询。所以WordPress路由url以使用url中的自定义post类型参数?

如果我选择创建自定义存档页,我在哪里修改主查询?在新存档模板文件中?

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

使用者Rarst 有一个very famous answer 他布置的地方the load process. 随时查看此图表wp-blog-header.php 加载它调用的函数wp() 它设置了许多WordPress全局语言,如$post$wp_query. ()Secondary Reference 按用户Gmazzap )

这是技术方面的问题,但问题的核心似乎是创建自己的自定义归档页面。WordPress有一个Template Hierarchy 允许您创建custom archives 对于自定义帖子类型之类的内容。

修改主查询的另一种常见方法是使用Hook 在您的功能中。调用的php文件pre_get_posts. 这将允许您在WordPress实际ping到数据库之前修改查询对象,以获取信息,从而很容易使用不同的设置修改循环。示例如下所示,将修改循环以显示20篇文章,而不是默认的10篇:

function wpse_265733( $query ) {

    // Don\'t run on admin
    if( $query->is_admin ) {
        return;
    }

    // Run only on the blog page
    if( is_home() ) {
        $query->set( \'posts_per_page\', 20 );    // Set posts per page to 20.
    }

}
add_action( \'pre_get_posts\', \'wpse_265733\' );

SO网友:Milo

加载插件和主题函数后,WordPress将传入的请求解析为查询变量,通过遍历重写规则列表找到与请求匹配的模式。

内置类型有许多默认规则-页面、各种存档、单一视图、分页、提要。您可以手动添加自己的规则或端点,或者注册新的内容类型,这些类型可以自动为自定义内容生成所有这些规则。

请求转换为查询变量后,将运行查询。在许多情况下,查询的结果决定加载哪个模板。

然后当然加载了模板,一切都很好。

也就是说,有许多操作和过滤器可供您在每一步修改内容。要查看流程的更详细视图以及其中的一些内容,请查看Action Reference.

最简单和最常用的方法是pre_get_posts action. 这将公开查询变量,并允许您在运行查询之前修改内容。看见WP_Query 查询变量的引用。

如果这不能满足您的需要,请查看request filter, 它允许更激进的查询操作,因为它直接在查询变量提取之后运行,而WordPress还没有对正在发生的请求类型做出任何决定。

相关推荐

Updating modified templates

我想调整一些。php模板文件在我的WordPress主题中,我知道正确的过程是将相关文件复制到子主题文件夹中并在那里编辑文件,这样我的修改就不会在将来的主题更新中丢失。但这是否意味着我将无法从主题更新中获益,因为我将文件放在了我的子主题文件夹中?这可能不是一件好事,因为主题更新可能添加了一些有用的特性,甚至修复了我最初需要对代码进行调整的问题!这方面的常见解决方案是什么?有人推荐了一款Diff应用程序——这是人们常用的吗?