WordPress 介於現成的 CMS 系統與程式框架之間,它的開源生態搭配外掛系統讓它在不同的場景下有著不同的面貌。不懂程式的使用者可以安裝好成千上萬開發者已經開發好的佈景主題和外掛實現各式各樣的功能;懂得程式的使用者可以自行呼叫 WordPress 核心的 API 或是基於其他外掛和佈景主題來撰寫程式碼片段加強原本的功能、製作自己想要的功能,甚至是自行開發佈景主題、外掛。
如果來剖析 WordPress 的結構,它由下至上堆疊大致可以分為幾個部分:
- WordPress 核心程式 (Core)
- 佈景主題 (Theme)
- 外掛 (Plugin)
- 程式碼片段 (Snippets)
- 使用者操作介面 (UI)
網路上有許多 WordPress 的教學,但大多都是圍繞著如何使用各種外掛以及佈景主題和如何操作使用者介面完成各式各樣的功能,實際深入 WordPress API 的教學相較之下稀少且很零散。這篇文章會帶你從核心程式開始了解到大多數人最常觸碰到的使用者操作介面。
WordPress 核心程式 (Core)
從上圖可以看到所有的模組都是基於 WordPress 的核心程式,這個是除了核心開發者、外掛開發者、佈景主題開發者以外大多數人不會接觸到的地方,既使是佈景主題或是外掛開發者也只會依據要開發的功能使用部分 WordPress 核心API,並不會真的了解所有全貌,但即使如此也是足夠開發各種外掛與佈景主題。
所有的核心程式會放置於 wp_admin 和 wp_include 資料夾當中,當中放置各種 WordPress 與資料庫操作、執行生命週期、API 和基本 CMS 相關基礎程式。
對於 WordPress 開發者來說,在核心程式中一定要了解的概念是貫穿整個 WordPress 生命週期的兩種類型鉤子 (Hooks):Actions 與 Filters。
Actions 讓你控制 WordPress 程式執行的過程。你可以透過 add_action 註冊預計執行的程式,該程式會在其他程式執行到 do_action 方法時被執行。這個預計執行可能會新增、修改、顯示各種資訊,但它並不會有回傳值。
Filters 讓你可以傳入資料,並且回傳處理過後的資料。你可以透過 add_filter 註冊一個處理資料的程式,當需要處理資料時可以使用 do_filter 傳入資料,最終會取得處理過的回傳資料。這個執行應該要是被隔離獨立的,除了傳入的資料外,不該去影響外界的其他資料。
WordPress 外掛 (Plugin)
WordPress 官方有提供一系列的文件說明如何製作 WordPress 外掛,如果你想要開發外掛你會需要具備有基本的 PHP 程式能力,並且了解許多 WordPress 核心程式提供的 API。最一開始你一定要先學習的是外掛的生命週期 API,你要知道一個外掛啟用、停用、解除安裝和從開始執行到結束執行會經過哪一些系統核心的 Hooks。有三個基本的 Hooks 是你必須知道的: register_activation_hook、register_deactivation_hook 和 register_uninstall_hook。
WordPress 佈景主題 (Theme)
在 WordPress 開發者最常見的議題除了外掛以外就是佈景主題,佈景主題如同字面上所表示就是指網站的顯示方式。不同於開發 WordPress 外掛,他一定會需要網站前端的相關知識並且要了解 WordPress 版型的相關知識,包含如何顯示每種不同的 WordPress 版型、區塊、頁面。如果你想要繼承佈景主題做更改,你可以使用子佈景主題 (Child Theme) 的方式,既使主佈景主題更新了也不會影響到你的子佈景主題。佈景主題的進入點是 functions.php 這個檔案,有些開發者會習慣將程式碼放在該檔案中。
WordPress 程式碼片段 (Snippets)
在 WordPress 裡程式除了已外掛和佈景主題的方式呈現,你也可以將程式碼放在佈景主題的 functions.php 或是安裝可以插入程式碼片段的外掛,例如: Code Snippets 或是 WP Code。因為它是在佈景主題、外掛、核心程式的上層,理所當然的也能夠存取底下所有的 API。因為程式碼片段是隨時可以拔插的形式,這種開發方式適合不想要觸碰到外掛和佈景主題開發的人。
WordPress 使用者操作介面
大多數人都只使用到這個部分,透過 WordPress 的後台介面再加上各式功能外掛和佈景主題來完成網站功能。例如想要製作頁面就會安裝頁面編輯器像是 Elementor、想要有電商功能會安裝 WooCommerce、想要會員功能會安裝 MemberPress、想要 LMS 功能會安裝 TutorLMS...等,安裝這些現成外掛後再花時間研究各個外掛的後台操作。