WORDPRESS第七課WORDPRESS源代碼研究-前臺運行流程

wordpress源代碼研究-前臺運行流程

WP是一個單入口的東西,也就是說他的所有前端處理都是在一個index.php裏的。但是爲什麼我們經常看到的不是index.php?XXXX。。而是像現在你看到這篇文章的URL一樣,他不是index.php啊,嗯,確實不是,這個真不是!

其 實這是一個rewrite的小把戲,你看到我的URL是這樣的,其實我的目錄里根本就沒這個文件,當沒有這個文件的時候,我的.htaccess 文件(相當於apache對這個目錄的配置)就將這個請求導向index.php。然後index.php分析一下我的URL,就知道我實際要做的是什麼 了,他會像你請求index.php?p=num一樣處理這個請求。所以就變成了看到是一個樣,做的又是另一個樣了。

最原始的WP根目錄下是沒有.htaccess文件的,你把固定鏈接改一下,改成其它的模式,就會生成這個.htaccess 了,不信可以試一下,我可不是70km的,我經得起考驗。

爲什麼要費這麼多事呢?這樣因爲這樣的話URL看起來更好看,對搜索引擎也更友好。

(PS:當然,有一些靜態化的插件,他們可能又有不同的原理。我還沒有研究過,以後再說。)

我們知道我們最偉大的就是這個index.php了,那看看他有什麼呢?它其實非常簡單,基本上就一行,就是包含wp-blog-header.php

 

wp-blog-header.php完成兩個動作,一個初始環境相關的一些數據,一個調用主題包模板進行顯示。也就是一個是把數據準備好,一個是把這些數據顯示出來。

初始環境,調用了:wp-load.php

wp-load.php主要就是包含了wp-config.php,其實就是定義了一些宏變量(DB設置,密鑰,路徑,語言)然後wp-config.php在最後調用wp-settings.php

這個wp-settings.php得重點說一下,他真的比較強大了,主要的工作都是這丫乾的。他先是做了很多細節上的東西,比如關閉register-globales,運行時間計算等。。。基本你看一下也就差不多。

最重要的是他在運行過程中調用了很多的action和filter.

什麼是action和filter呢,這是WP的插件機制的核心實現,說白了就是一些hook在一定位置上的函數,程序運行到那裏就會執行。這個過程我以後會獨立出來寫。

反正就是把好多變量都取到了,比如哪些變量呢?比如有哪些插件,插件的信息,比如用戶相關的信息。。反正是很多,就是在這個頁面可能會用到的都取了,只是不會SB到去取所有文章這種東西。

這 些數據現在是以PHP的數據類型存在於內存中的,後面一步就是調用模板了,其實調用很簡單,就是包含。爲什 麼一包含他就可以顯示那麼多數據呢??我們都用過Smarty。那Smarty在用之前還要把要用的參數assign..然後再用display調用模板 呢。爲什麼這個這麼簡單呢,說實話,因爲Smarty在這方面更強大。

我們這個就是個動態的東西,比如你現在看到這個頁面,他要顯示文 章標題,文章內容,文章標籤,還有一些其它的 公共的東西,有的數據已經在前面取到內存中了,我們只要調用約定好的方法就可以取到了,但有的數據(比如文章標題,內容)他們還在數據庫裏,我們不能直接 用,其實這時候也有通用的接口,你只要調用一個函數,就有程序乖乖地去給你從數據庫裏取東西了。這都是早就封閉好了的。方便吧。

然後 呢,你看到這個頁面,他是一個模板,他又不是一個模板,是這樣的:他本是一個單獨的模板,但是這個模板裏 面又調用了其它的模板。比如這個header.每個頁面都一樣,footer也是,右邊基本上也是,每個頁都一樣。所以他們在模板裏是單獨的PHP文件 (header.php,footer.php),完整的頁面的模板只是實現了中間這一部分,上和下都是通過包含這些一小塊一小塊的模板來呈現的。

大 概就是這樣吧。其實真TM是挺簡單的,下一篇再講插件機制,其實也不難,我發現WP看起來最困難的就是他對 每個細節的處理都那麼精準。好多問題要是我寫肯定寫不到那麼完美。比如你可以看一下wp-settings.php裏面那些包含的文件,他們各司其職,每 一個文件都那麼完美!!

.entry-content

發佈了34 篇原創文章 · 獲贊 12 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章