WordPress 的目錄及檔案架構十多年來沒有太大變化,即使未來也不會有太大改變。為了顧及舊版本的使用者,新版本必須向下相容,因此剛從官網下載好,並解壓縮 zip 檔案,目錄及檔案結構大致如下。
圖:WordPress 6.3.1 版第一層檔案目錄
如果你以前用過 WordPress,會發現這第一層的目錄及檔案結構都一模一樣。那麼身為一位開發者,我們的「工作區域」是在那些目錄呢?今天的文章主要就是在說明 WordPress 的那些目錄是我們不可以去動的,那些是我們可以拿來作為開發新功能使用。
WordPress 的核心目錄內的資料不能修改。更新版本時,舊版本的檔案會被更新,如果你用修改核心程式碼的方式來達成某些功能,更版後這些修改會被覆蓋而消失。更糟糕的情況是改壞了,影響到網站的正常運作。
wp-admin
WordPress 的後台,包含了所有 WordPress 後台管理界面的檔案及目錄。我們在開發後台相關的程式時,不清楚要客製化的區塊會用到那些鉤點的時候,可以打開查詢後台相關的 PHP 檔案中,埋了那些鉤點和過濾器,但千萬不能直接修改它們。
wp-includes
包含了WordPress 核心功能的檔案,包括了 PHP 以及非 PHP 的依賴套件,例如 JavaScript 的 jQuery、CSS 檔案。當然,這個目錄裡的檔案也不能修改。
資源目錄指的是存放各式各樣的資源檔案,WordPress 更新核心版本時並不會影響到的目錄。使用 PHP Laravel 框架的讀者,可以把它想像成為 storage 目錄,用途是類似的。
wp-content
圖:WordPress 6.3.1 版 wp-content 目錄
剛裝好 WordPress 時,這個目錄只有 plugins
和 themes
兩個目錄,隨著其它外掛的安裝使用,會增加許多外掛自行產生的目錄。一旦開始寫文章上傳圖片後,你會發現 uploads
目錄會被自動建立並放在 wp-content
底下。
uploads
:放置上傳的媒體檔案及附件檔案的地方。plugins
:放置外掛程式的目錄。themes
:放置佈景主題的目錄。index.php
收集流量請求 (request) 的入口檔案,WodPress 會根據請求的網址路徑,比對存放在資料庫中的路由設定,產生相對應的頁面。
當在子目錄中看到內容為空的 index.php
,是用來保護目錄不被偷窺的作用,原理是檔案的預設讀取檔案通常為 index.html
或 index.php
。
wp-config-sample.php
它是一個設定的樣本檔,當完成安裝 WordPress 的時候,wp-config.php
會被自動建立。如果你想手動設定,將這個檔案改名為 wp-config.php
並修改檔案內容即可。
其它檔案為核心檔案,用途為依階段載入 wp-includes
目錄內對應的功能,主要任務為初始化 WordPress 載入及埋入主要鉤點。
除了 wp-config.php
可以修改以外,以上檔案切勿修改。
「Drop-in」這個字真難翻譯,就先暫時稱它「嵌入式外掛」好了。它是 WordPress 隱藏的高級功能,只有特殊用途的外掛或者更進階的客製化,用來替換 WordPress 內建功能的時候,才會用到。
它並不是透過安裝外掛的方式來啟用,而是命名一個相同名稱的 PHP 檔案,手動放到 wp-content
目錄底下即可。
圖:定義嵌入式外掛的所在位置及內容
檔案 | 描述 | 載入時機 | 類型 |
---|---|---|---|
advanced-cache.php | 進階快取 | WP_CACHE 設為 true |
一般 |
db.php | 客製化資料庫類別 | 載入時 | 一般 |
db-error.php | 客製化資料庫錯誤訊息 | 出現錯誤 | 一般 |
install.php | 客製化安裝腳本 | 安裝時 | 一般 |
maintenance.php | 客製化維護訊息 | 維護 | 一般 |
object-cache.php | 外部物件快取 | 載入 | 一般 |
php-error.php | 客製化 PHP 錯誤訊息 | 出現錯誤 | 一般 |
fatal-error-handler.php | 客製化 嚴重錯誤處理器 | 出現錯誤時 | 一般 |
sunrise.php | 在多站點加載前執行 | SUNRISE 設為 true |
多站點 |
blog-deleted.php | 客製化網站刪除訊息 | 在已刪除的部落格 | 多站點 |
blog-inactive.php | 客製化網站非活動訊息 | 在非活動的部落格 | 多站點 |
blog-suspended.php | 客製化網站停用訊息 | 在已封存或被標記為垃圾的部落格 | 多站點 |
嵌入式外掛就是一些特殊的 PHP 檔案,每一個都在 WordPress 裡頭有其特定的用途。比如說,你可以用 advanced-cache.php
為你的網站加上進階快取功能。坊間的快取外掛幾乎都是採用這個檔案,來提供頁面快取等功能。
或者換掉 WordPress 核心的 db.php
檔案和它的 wpdb
類別,打造屬於你的資料庫操作方式唷!
說了這麼多,那麼我們可以從那一個目錄開始寫 WordPress 程式呢?
在 plugins
目錄下,建立一個自己的外掛目錄,例如 my-example
,如果你有使用 Git 等版本控制工具,這個目錄就是你的工作區域。
在 themes
目錄下,建立一個繼承當前所使用的佈景主題的「子佈景主題」來為網站的外觀做更多的客製化。而不會擔心佈景主題更新時,自己的程式碼被覆蓋掉。同樣地,如果你有使用 Git 等版本控制工具,這個子佈景主題目錄就也是你的工作區域之一。
除了工作區域以外的核心程式碼都不能修改,以免在 WordPress 後台進行版本更新後,丟失修改過的程式碼。
接下來的章節,會更詳細的介紹作法。
課後思考:
如果修改核心檔案,然後在團隊的工作文件詳細記錄,以提醒升級時要補上程式碼,你覺得這種方式可行嗎?
前篇解答參考:
PHP 社群多年才有 PSR 標準,在那之前,WordPress 已存在非常久的時間,也已經有定義自己的程式碼風格標準,無法說換就換。例如陣列的短語法
[]
是 PHP 5.4 版引入,為了向下相容更老的 PHP 版本,所以依舊採用array()
的方式,就一直流傳至今。