了解 WordPress 的幕后工作原理非常有趣。对大多数用户来说,它似乎很简单:输入网址,页面就能快速加载。然而,实际上后台发生了很多事情。
几年前我们刚开始使用 WordPress 时,就深入研究了它的运作原理。现在,我们希望用简单易懂的方式与您分享这些知识,帮助您更好地了解 WordPress。
在本指南中,我们将带您了解 WordPress 的内部运作机制。我们还制作了一张易于理解的信息图,以便您更清楚地了解相关内容。
什么是WordPress?
WordPress是一个网站搭建和内容管理系统。它是开源软件,任何人都可以用它来创建任何类型的网站。
它最初是2003年的一个博客平台,但很快转型为内容管理系统(CMS),后来又发展成为一个功能齐全的网站建设平台。如今,它为互联网上超过43%的网站提供支持。
要了解有关 WordPress 的发展历程、历史、优缺点等更多信息,请参阅我们关于WordPress 是什么以及构建 WordPress 网站需要多少成本的综合指南 。
为什么要学习 WordPress 的工作原理?
WordPress 是一个开源软件,这意味着任何人都可以研究它的代码,并为其编写自己的应用程序(插件)和模板(主题)。
多年来,我们看到无数初学者通过学习 WordPress 软件的工作原理,迅速成长为高级用户。
它还将教你如何提高 WordPress 性能以及如何为你的项目编写更好的代码。
本指南将一步一步地引导您完成整个过程。我们将从用户请求页面开始,到页面完全加载完毕结束。
准备好了吗?我们开始吧。
您还可以参考下面的文字教程了解更多详情。
1. 加载 wp-config.php 文件
wp-config.php 是 WordPress 的配置文件。它设置 WordPress 站点的全局变量,并包含 WordPress 数据库信息。显而易见,这是 WordPress 加载的第一个文件。
了解更多关于wp-config.php文件以及如何编辑它的信息。
2. 设置默认常量
加载 wp-config.php 文件后,WordPress 将继续设置默认常量。
这包括诸如WordPress 默认上传位置、最大文件大小以及在 wp-config.php 文件中设置的其他默认常量等信息。
3. 加载 advanced-cache.php 文件
如果你的网站上存在 advanced-cache.php 文件,那么 WordPress 接下来会加载它。
此文件作为插件文件使用,被多个热门插件(尤其是WordPress 缓存插件)所采用。如果您的网站使用此文件,您将在“插件”屏幕上看到一个名为“插件”的新选项。

4. 加载 wp-content/db.php 文件
WordPress 允许开发者创建自己的数据库抽象层,并将其加载到位于 wp-content 文件夹内的 db.php 文件中。WordPress 缓存插件通常利用这一点来提升数据库性能。
如果你的网站存在此文件,WordPress 将加载它。
5. 连接 MySQL 并选择数据库
WordPress 现在已获得足够的信息继续执行下一步操作。它将连接到 MySQL 服务器并选择数据库。
如果 WordPress 无法连接到数据库,您将看到“建立数据库连接时出错”的错误提示,WordPress 将在此处退出。
如果一切顺利,则会进入下一步。
6. 加载 object-cache.php 或 wp-includes/cache.php 文件
WordPress 现在会查找 object-cache.php 文件。如果该文件不存在,WordPress 将继续加载 wp-includes/cache.php 文件。
7. 加载 wp-content/sunrise.php 文件
如果是多站点网络,WordPress 将会在 wp-content 文件夹中查找 sunrise.php 文件(如果存在)。
8. 加载本地化库
WordPress 现在会加载 wp-includes 文件夹中的 l10n.php 库。该文件会加载 WordPress 本地化系统,加载翻译,设置语言环境等。
您可以查看我们的指南,了解如何使用其他语言的 WordPress。
9. 加载多站点插件
如果是多站点网络,WordPress 将加载多站点插件。了解更多关于WordPress 多站点网络上插件的工作原理。
10. 执行操作“muplugins_loaded”
muplugins_loaded操作现在由 WordPress 执行。此操作仅适用于 WordPress 多站点上的网络激活插件。
11. 加载已激活的插件
WordPress 现在会加载网站上所有已激活的插件。它通过查看WordPress 数据库options 表中的 active_plugins 条目来实现这一点。这样,WordPress 就可以忽略网站上已安装但未激活的插件。
12. 加载 pluggable.php 文件
pluggable.php 文件包含可被 WordPress 插件重新定义的函数。
WordPress 现在会检查是否有其他插件已经定义了此文件中的函数。如果没有,它将自行定义这些函数。
13. 执行操作“plugins_loaded”
WordPress 现在将运行“plugins_loaded”操作。
它允许开发者将他们的函数挂钩到所有活动插件加载完毕后运行。
14. 加载重写规则
WordPress 现在将加载重写规则。这些重写规则有助于 WordPress 使用对搜索引擎友好的 URL。
15. 实例化 $wp_query、$wp_rewrite、$wp
此时,WordPress 会加载以下对象:
$wp_query:保存 WP_Query 类的全局实例。它以典型的 WordPress 查询格式告诉 WordPress 要请求的内容。
$wp_rewrite:保存 WP_Rewrite 类的全局实例。它包含重写规则和函数,用于告诉 WordPress 使用哪个 URL 来显示请求的内容。
$wp: WP 类的全局实例包含解析请求并执行主查询的函数。
16. 执行操作“setup_theme”
WordPress 现在将运行“setup_theme”操作。此操作会在WordPress 主题加载之前运行。
17. 加载子主题的 functions.php 文件
functions.php 文件充当插件的角色,用于 WordPress 主题中,为网站添加主题特有的功能。如果您使用的是子主题,WordPress 现在会加载子主题的functions.php文件。
否则,它会继续加载当前活动主题的 functions.php 文件。
18. 加载父主题的 functions.php 文件
如果您使用的是子主题,那么 WordPress 现在会加载父主题的 functions.php 文件。
19. 执行操作“after_setup_theme”
此操作在 WordPress 设置主题并加载主题功能后运行。它是主题可执行的第一个操作。
20. 设置当前用户对象
此时,WordPress 会加载当前用户对象。这使得 WordPress 能够根据用户的角色和权限来管理请求。
21. 执行操作“初始化”
WordPress 目前已加载所有必要的关键信息。现在,它执行“init”操作。此操作还会注册 WordPress 核心中已有的或网站上已安装插件提供的区块。
此操作允许开发人员添加在 WordPress 加载完所有上述信息后需要执行的代码。
22. 执行操作“widget_init”
该widget_init操作允许开发者注册小部件并运行他们此时需要运行的代码。
23. 运行 wp()
WordPress 现在调用wp()位于wp-includes/functions.php文件中的函数。它设置 WordPress 查询全局变量 $wp、$wp_query、$wp_the_query,然后调用 $wp->main。
24. 解析请求
现在 WordPress 已经掌握了解析用户请求所需的所有信息。它首先检查重写规则,以确定是否与用户的请求匹配。
然后它运行查询变量过滤器,请求操作钩子,并发送标头请求。
25. 运行查询
如果没有内容与查询匹配,则 WordPress 将设置 is_404 变量。
否则,WordPress 将继续加载查询变量。
然后它将运行 WP_Query->get_posts()。
接下来,它使用 WP_Query 对象触发 DO_ACTION_REF_ARRAY ‘pre_get_posts’ 操作。
WordPress 现在将运行 apply_filters 来清理查询并进行一些最终检查。
现在,它从数据库中获取帖子,并应用 posts_results 和 the_posts 过滤器。
查询部分以 WordPress 返回文章结束。
26. 执行操作“template_redirect”
WordPress 现在将执行此template_redirect操作。此钩子会在 WordPress 确定要加载哪个模板页面之前运行。
27. 装载进料模板
如果请求的内容是RSS 源,则 WordPress 会加载源模板。
28. 加载模板
WordPress 现在会根据 WordPress 模板层级结构查找模板文件。然后它会加载该模板,该模板通常包含一个WordPress 循环。
29. 执行“关闭”操作
在结束所有 PHP 执行之前,WordPress 会执行最后一个操作,即 shutdown。
WordPress 在这里停止运行。它已经运行了代码并生成了用户请求的网页。
现在,您的网站托管服务器会响应用户的请求,向他们发送 WordPress 生成的网页。
本页面包含 HTML、CSS 和 Javascript 代码,用于告诉用户的浏览器如何在屏幕上显示该页面。
是不是很神奇?所有这些都在几毫秒内完成。如果您使用的是这些顶级的 WordPress 主机服务之一,您的页面理想情况下只需几秒钟即可加载完毕。
希望这篇文章能帮助您了解 WordPress 的底层工作原理。



湘公网安备43020002000238