WP初始化的過程:當你輸入<yourlink>/wordpress對wordpress進行初始化時,wordpress默認會找
根目錄下的index.php頁面,看一下index.php頁面。
<?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。
<?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,php
WP_Rewrite和WP類的實例。而後,wp-blog-header執行wp()函數,並經過其調用$wp所屬WP類的main方法,wordpress
這個方法又調用一系列方法,但最重要的是parse_request方法, WP從這裏開始解析URL並創建主循環。
咱們看一下wordpress的主方法:函數
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初始化時的信息。post
下面就討論一下當咱們設置自定義的永久連接時,wordpress的運做過程。
當咱們使用了自定義的永久連接的時候,wordpress會自動生成.htaccess文件,而且在這個文件中生成相ui
對應於永久連接的匹配規則,在wordpress/wp-includes/rewrite.php中有針對.htaccess文件的重寫規則,其this
中$use_verbose_rules參數規定了輸出信息的詳盡和簡約,默認的狀況下爲false。輸出的信息比較簡單,url
以下spa
# 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錯誤。code