wp-blog-header.php是index.php后第一个加载上来的文件
上代码
wp-blog-header.php代码与index.php代码数量差不多。代码如下
<?php
/**
* Loads the WordPress environment and template.
*
* @package WordPress
*/
if ( ! isset( $wp_did_header ) ) {
$wp_did_header = true;
// Load the WordPress library.
require_once __DIR__ . '/wp-load.php';
// Set up the WordPress query.
wp();
// Load the theme template.
require_once ABSPATH . WPINC . '/template-loader.php';
}
知识点1:if ( ! isset( $wp_did_header ) ){}
-
if(条件){}:当条件为真时,执行{}里的内容
-
!条件:取反意思,当条件为真时,使用**!**后整个if())中的判断为假,反之亦然。
-
isset():检测变量是否设置,检测变量是否设置,并且不是 NULL。如这里$wp_did_header变量未设置,或者为NULL时,返回FALSE,否则返回TURE
这个函数配合{}内的
$wp_did_header = true
语句,实现if ( ! isset( $wp_did_header ) ){内容}
,中大括号里的内容只能执行一次,防止重复加载。
知识点2:require_once
*require_once()语句在脚本执行期间包含并运行指定文件(通俗一点,括号内的文件会执行一遍)。此行为和require()*语句类似,唯一区别是如果该文件中的代码已经被包含了。
- require_once __DIR__ . ‘/wp-load.php’; 这里实际是会加载当前
wp-blog-header.php
文件所在目录下的wp-load.php
文件,注释上写了这个作用是Load the WordPress library加载wordpress库,这里不深究,但这个载入的文件中会定义
define( 'ABSPATH', __DIR__ . '/' );
define( 'WPINC', 'wp-includes' );
这两个常量,并最终包含functions.php这个文件(这个文件夹会包含wp()函数)
/**
* Set up the WordPress query.
*
* @since 2.0.0
*
* @global WP $wp Current WordPress environment instance.
* @global WP_Query $wp_query WordPress Query object.
* @global WP_Query $wp_the_query Copy of the WordPress Query object.
*
* @param string|array $query_vars Default WP_Query arguments.
*/
function wp( $query_vars = '' ) {
global $wp, $wp_query, $wp_the_query;
$wp->main( $query_vars );
if ( ! isset( $wp_the_query ) ) {
$wp_the_query = $wp_query;
}
}
- require_once ABSPATH . WPINC . ‘/template-loader.php’;依据上面关于ABSPATH定义,我们可以知道,这里其实会加载当前
wp-blog-header.php
文件所在文件夹下的/wp-includes/template-loader.php
这个文件,注释上写了Load the theme template,字面意识为加载主题模板
知识点3:函数wp();
wp();是PHP由wordpress自定义函数,通过上面wp-load.php文件加载进来,在这里进行调用,wp()函数会调用 /wp-includes/class-wp.php
下的 WP
类的 main
方法, 这个方法又调用一系列方法,但最重要的是 parse_request
方法,WP 从这里开始解析 URL 并建立主循环。