二、wordpress 之 wp-blog-header.php

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 并建立主循环。

发表评论