記錄下自己閱讀wordpress的過程。打算先整體過一遍。
我下載的wordpress版本是4.9.5。
首先是入口文件index.php
僅僅只是告訴要使用主題,然后加載wordpress環境和模板。
進入wp-blog-header.php文件看看
使用單例的方式執行if中的內容。主要包括3個部分。
一、加載wp-load.php //加載wordpress需要的庫
二、wp(); //設置 wordpress 查詢,這里是wordpress的主要執行部分。
三、加載template-loader.php // 主題模板
wp-load.php 是引導文件,設置絕對路徑常量,加載wp-config.php文件,該文件主要設置數據庫用戶密碼等數據。設置錯誤輸出,等wordpress環境設置。這里還有一個防止嵌套安裝的判斷。
wp-config.php設置了數據庫信息,debug模式,加載wp-settings.php。
wp-settings.php修復常見的變量和包含wordpress的程序和函數庫
主要引入了wp-includes中的
load.php //wordpress自己的函數類庫
default-constants.php //定義常量和全局變量
plugin.php //加載插件的一些API
加載version.php //主要是所需的db,php,wordpress版本支持信息
然后執行wp_initial_constants();顧名思義是要初始化了。設置wordpress的運行時內存。定義很多常量。
wp_check_php_mysql_versions(); //檢查wordpress的mysql版本是否支持
禁用魔術引導,定義時區,關閉register_globals防止用戶字段被注冊成全局變量
wp_fix_server_vars(); //標准化$_SERVER變量
wp_favicon_request(); //檢查請求,如果是請求favicon.ico的不用加載全部wordpress
這里header的作用不是很清楚,mark一下,明天找找相關的答案。
wp_maintenance(); //檢查是否處於維護模式,可以提示更新版本
time_start(); //記錄wordpress開始時間
wp_debug_mode(); //檢查是否處於debug模式
定義不存在的函數
if(!function_exists('_')) {
function _($string) {
return $string;
}
}
if語句的不同寫法
if (XXX) :
XXX;
endif;
主要是檢查是否有因為php版本太早而缺失的函數,來補充實現。
后面是wordpress自己寫的自動類加載函數。
require( ABSPATH . WPINC . '/compat.php' );
wordpress使用list 函數
require( ABSPATH . WPINC . '/class-wp-list-util.php' );
wordpress主要的函數庫API
require( ABSPATH . WPINC . '/functions.php' );
require( ABSPATH . WPINC . '/class-wp-matchesmapregex.php' );
require( ABSPATH . WPINC . '/class-wp.php' );
require( ABSPATH . WPINC . '/class-wp-error.php' ); //錯誤類
require( ABSPATH . WPINC . '/pomo/mo.php' );
require_wp_db(); //開始加載數據庫類
wp_start_object_cache(); //開始wp對象緩存
require( ABSPATH . WPINC . '/default-filters.php' ); //加載默認filter
多占點的配置
add_filter和apply_filter的一些使用
register_shutdown_function( 'shutdown_action_hook' ); //程序結束前清理輸出緩沖區
wp_not_installed() 如果沒有安裝則運行wp安裝程序
$GLOBALS['wp_embed'] = new WP_Embed(); 用戶插入視頻
wp_plugin_directory_constants() 定義wp-content路徑
定義cookie相關常量
定義並執行ssl常量
等環境配置。
wp();來看wp方法。
public function main($query_args = '') {
$this->init(); //設置當前用戶
$this->parse_request($query_args); //解析查詢請求
$this->send_headers(); //設置http頭
$this->query_posts(); //根據查詢變量設置Loop
$this->handle_404(); //如果找不到,設置404
$this->register_globals(); //注冊全局變量
/**
* Fires once the WordPress environment has been set up.
*
* @since 2.1.0
*
* @param WP $this Current WordPress environment instance (passed by reference).
*/
do_action_ref_array( 'wp', array( &$this ) ); //wordpress環境變量准備完成之后執行
}
后面就是加載模板