WordPress工作机制

wordpress作为一个功能丰富的博客程序深受大家喜爱,我也一直在用wordpress,虽然也写了不少关于wordpress的文章,还是局限于wordpress主题的功能,很少涉及到更加深入的东西,所以以后会更多的介绍深入的wordpress知识。

wordpress初始化过程

WP初始化的过程:当你访问wordpress网站的时候,wordpress开始进行初始化,wordpress默认会找根目录下的index.php页面,我们看一下index.php页面:

1
2
3
4
5
<?php
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('./wp-blog-header.php'); ---/wp-blog-header.php包含进来
?>

你会发现,它会去调用根目录下的wp-blog-header.php,我们继续看wp-blog-header.php:

1
2
3
4
5
6
7
8
<?php
if ( !isset($wp_did_header) ) {
$wp_did_header = true;
require_once( dirname(__FILE__) . '/wp-load.php' );  ---加载wp-load.php
wp();  ---加载function WP();
require_once( ABSPATH . WPINC . '/template-loader.php' );   ---加载模板文件
}
?>

通过wp-load.php,wordpress先后把 wp-config.php ,wp-setting.php ,classes.php ,fucntions.php ,query.php等文件加载进来,并建立了三个全局变量: $wp_the_query, $wp_rewrite和 $wp ,分别为 WP_Query, WP_Rewrite和WP类的实例。

然后 wp-blog-header 执行 wp() 函数,并通过其调用 $wp 所属WP类的main方法, 这个方法又调用一系列方法,但最重要的是 parse_request 方法, WP从这里开始解析URL并建立主循环。 我们看一下wordpress的main方法:

1
2
3
4
5
6
7
8
9
function main($query_args = '') {
$this->init();  --初始化环境
$this->parse_request($query_args);   --解析请求
$this->send_headers();  --发送头信息
$this->query_posts();  --查询日志
$this->handle_404();   --操作404(URL地址不存在)
$this->register_globals();  --注册全局变量
do_action_ref_array('wp', array(&$this));
}

接下来就是加载模板文件,呈现wordpress博客界面。
这基本上就是wordpress初始化时的信息。

wordpress内部运行实例

下面就讨论一下当我们设置自定义的永久链接时,wordpress的运作过程。

当我们使用了自定义的永久链接的时候,wordpress会自动生成.htaccess文件,并且在这个文件中生成相 对应于永久链接的匹配规则,在wordpress/wp-includes/rewrite.php中有针对.htaccess文件的重写规则,其中 $use_verbose_rules 参数规定了输出信息的详尽和简约,默认的情况下为false。输出的信息比较简单, 如下

1
2
3
4
5
6
7
8
9
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

如果想查看完整的匹配规则,就把$use_verbose_rules设置为true。 wordpress在对使用了自定义的永久链接进行处理时,它还是会调用wp-include/classes.php文件中的parse_request函数,对发过来的请求进行解析,无论是否为pathinfo类型的请求,都会被赋值给$request参数,然后调用该参数与.htaccess中的规则进行匹配,如果找到一个匹配就会“发送头信息” 、“查询日志”,如果没有任何匹配就会返回404错误。

小结

以上介绍了用户访问wordpress时它的一系列动作,其实可以看到模板文件加载之前已经加载了很多文件,只有了解这些才能更深入的理解wordpress。

参考文章:wordpress工作原理

此条目发表在WordPress教程分类目录,贴了标签。将固定链接加入收藏夹。