iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
WordPress

從 0 到 100:WordPress 開發者的實戰手冊系列 第 4

Day 4 - 認識 WordPress 的目錄及檔案結構

  • 分享至 

  • xImage
  •  

WordPress 的目錄及檔案架構十多年來沒有太大變化,即使未來也不會有太大改變。為了顧及舊版本的使用者,新版本必須向下相容,因此剛從官網下載好,並解壓縮 zip 檔案,目錄及檔案結構大致如下。

WordPress 目錄及檔案
圖: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

wp-content 目錄
圖:WordPress 6.3.1 版 wp-content 目錄

剛裝好 WordPress 時,這個目錄只有 pluginsthemes 兩個目錄,隨著其它外掛的安裝使用,會增加許多外掛自行產生的目錄。一旦開始寫文章上傳圖片後,你會發現 uploads 目錄會被自動建立並放在 wp-content 底下。

  • uploads:放置上傳的媒體檔案及附件檔案的地方。
  • plugins:放置外掛程式的目錄。
  • themes :放置佈景主題的目錄。

檔案用途

核心檔案

index.php

收集流量請求 (request) 的入口檔案,WodPress 會根據請求的網址路徑,比對存放在資料庫中的路由設定,產生相對應的頁面。

當在子目錄中看到內容為空的 index.php,是用來保護目錄不被偷窺的作用,原理是檔案的預設讀取檔案通常為 index.htmlindex.php

wp-config-sample.php

它是一個設定的樣本檔,當完成安裝 WordPress 的時候,wp-config.php 會被自動建立。如果你想手動設定,將這個檔案改名為 wp-config.php 並修改檔案內容即可。

其它檔案

其它檔案為核心檔案,用途為依階段載入 wp-includes 目錄內對應的功能,主要任務為初始化 WordPress 載入及埋入主要鉤點。

除了 wp-config.php 可以修改以外,以上檔案切勿修改。

嵌入式外掛 (drop-in)

「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 類別,打造屬於你的資料庫操作方式唷!

工作區域 (workspace)

說了這麼多,那麼我們可以從那一個目錄開始寫 WordPress 程式呢?

自定義外掛

plugins 目錄下,建立一個自己的外掛目錄,例如 my-example,如果你有使用 Git 等版本控制工具,這個目錄就是你的工作區域。

子佈景主題

themes 目錄下,建立一個繼承當前所使用的佈景主題的「子佈景主題」來為網站的外觀做更多的客製化。而不會擔心佈景主題更新時,自己的程式碼被覆蓋掉。同樣地,如果你有使用 Git 等版本控制工具,這個子佈景主題目錄就也是你的工作區域之一。

總結

除了工作區域以外的核心程式碼都不能修改,以免在 WordPress 後台進行版本更新後,丟失修改過的程式碼。

  • 不要直接修改目前所使用的佈景主題檔案,而是使用子佈景主題的方式來進行修改。
  • 建立自定義外掛,作為全站功能客製化的主要方式。

接下來的章節,會更詳細的介紹作法。


課後思考:

如果修改核心檔案,然後在團隊的工作文件詳細記錄,以提醒升級時要補上程式碼,你覺得這種方式可行嗎?

前篇解答參考:

PHP 社群多年才有 PSR 標準,在那之前,WordPress 已存在非常久的時間,也已經有定義自己的程式碼風格標準,無法說換就換。例如陣列的短語法 [] 是 PHP 5.4 版引入,為了向下相容更老的 PHP 版本,所以依舊採用 array() 的方式,就一直流傳至今。


上一篇
Day 3 - 準備 PHP 的整合開發環境,提升 WordPress 開發效率
下一篇
Day 5 - 使用 WordPress 子佈景主題建立客製化外觀
系列文
從 0 到 100:WordPress 開發者的實戰手冊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言