黃聰:wordpress工做原理

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

相關文章
相關標籤/搜索