根目錄下的index.php頁面,看一下index.php頁面。
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require('./wp-blog-header.php'); ---把/wp-blog-header.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的主方法:
$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會自動生成.htaccess文件,並且在這個文件中生成相
對應於永久鏈接的匹配規則,在wordpress/wp-includes/rewrite.php中有針對.htaccess文件的重寫規則,其
中$use_verbose_rules參數規定了輸出信息的詳盡和簡約,默認的情況下為false。輸出的信息比較簡單,
如下
<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錯誤。