黃聰: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,

WP_Rewrite和WP類的實例。然后,wp-blog-header執行wp()函數,並通過其調用$wp所屬WP類的main方法,

這個方法又調用一系列方法,但最重要的是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初始化時的信息。

下面就討論一下當我們設置自定義的永久鏈接時,wordpress的運作過程。
當我們使用了自定義的永久鏈接的時候,wordpress會自動生成.htaccess文件,並且在這個文件中生成相

對應於永久鏈接的匹配規則,在wordpress/wp-includes/rewrite.php中有針對.htaccess文件的重寫規則,其

中$use_verbose_rules參數規定了輸出信息的詳盡和簡約,默認的情況下為false。輸出的信息比較簡單,

如下

 

 

復制代碼
# 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錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM