很多人在調整版型時,改了樣式卻發現分類頁還是長一樣,或者想讓某一篇文章用不同的頁面配置,卻不知道從哪下手。這背後牽涉到 WordPress 模板層級的運作邏輯——也就是系統在決定「用哪個模板渲染這個頁面」時,依循的那套選取規則。
理解這套邏輯,你才能知道為什麼某個模板會被套用,也才能知道「要讓分類頁有獨立版型,該建立哪個檔案、在 FSE 裡建立哪個模板」。不理解它,改模板就只能靠猜。
WordPress 怎麼決定要用哪個模板
每次有人造訪一個頁面,WordPress 的模板引擎都會跑一套選取流程:從最具體的模板開始往下找,找到第一個存在的就用它。
以分類頁為例,系統的查找順序是這樣:先找針對這個分類 ID 客製化的模板(如 category-{slug}.php),沒有就找針對分類的通用模板(category.php),再沒有就向上找 archive.php,最後才是 index.php。這個「從最具體到最通用」的遞退邏輯,就是該系統的核心。
不同頁面類型各有自己的查找鏈。單篇文章(single.php)、自訂文章類型(single-{post_type}.php)、靜態頁面(page.php)、首頁(front-page.php)、404 頁面(404.php)、搜尋結果(search.php)都有各自的起始點,但最終的備用保底都指向 index.php。
各頁面類型的模板查找鏈
以下整理常見頁面類型的查找順序,愈上面的優先度愈高。
| 頁面類型 | 查找順序(由高到低) |
|---|---|
| 分類頁 | category-{slug}.php → category-{id}.php → category.php → archive.php → index.php |
| 標籤頁 | tag-{slug}.php → tag-{id}.php → tag.php → archive.php → index.php |
| 自訂分類法 | taxonomy-{taxonomy}-{term}.php → taxonomy-{taxonomy}.php → taxonomy.php → archive.php → index.php |
| 單篇文章 | single-post-{id}.php → single-{slug}.php → single-post.php → single.php → singular.php → index.php |
| 自訂文章類型 | single-{post_type}-{slug}.php → single-{post_type}.php → single.php → singular.php → index.php |
| 靜態頁面 | 頁面指定範本 → page-{slug}.php → page-{id}.php → page.php → singular.php → index.php |
| 首頁(靜態) | front-page.php → home.php → page.php → index.php |
| 搜尋結果 | search.php → index.php |
| 404 | 404.php → index.php |
這份查找鏈是傳統 PHP 主題的邏輯。切換到全站編輯器(FSE)後,對應的模板概念依然存在,只是改用 HTML 區塊模板檔案,儲存在主題的 templates/ 資料夾下,命名規則沿用同一套。
在全站編輯器裡建立獨立版型
使用支援 FSE 的區塊主題時,你可以直接在後台的「外觀 → 編輯器」裡新增模板,不需要手動建立 PHP 檔案。
進入編輯器後,左側面板的「模板」區塊會列出目前主題已有的模板。點選右上角的「新增模板」,系統會提示你選擇模板類型,包含分類頁、標籤頁、作者頁、單篇文章、靜態頁面等選項。建立後,這個模板就會套用到對應的頁面類型,優先度高於主題預設模板。
如果你要對「特定分類」設定獨立版型,步驟稍有不同。
替特定分類建立獨立模板
在新增模板的步驟裡,選擇「分類」後,系統會讓你選要針對哪個分類建立,而不是套用到全部分類。建立後,這個模板只會在訪客瀏覽該分類的彙整頁時被啟用,其他分類仍沿用預設的分類模板。
這個做法等同於在傳統主題裡建立 category-{slug}.php,FSE 只是把操作介面從程式碼移到視覺化編輯器。
替單篇文章指定獨立模板
靜態頁面在傳統主題裡可以透過「頁面屬性」指定模板,單篇文章則通常需要靠外掛或手動建立 single-{slug}.php 才能做到。FSE 主題下,你可以在編輯器裡建立一個針對「單篇文章」的模板,然後在文章編輯畫面的側邊欄,找到「模板」設定區塊,指定這篇文章要使用哪個模板——層級與 single-post-{id}.php 相當,優先度高於通用的 single.php。
模板零件的角色
FSE 還引入了「模板零件(Template Parts)」的概念,用來切割頁眉、頁腳、側邊欄等可重複使用的區塊。模板零件本身不直接對應到頁面類型,而是被各模板呼叫引用。當你想讓不同版型共享同一個頁腳設計,就透過引用同一個零件來達成,而不是在每個模板裡各自複製一份。
傳統主題與 FSE 主題的差異對照
兩種主題架構在模板概念上是一致的,差別主要在儲存方式與編輯介面。
| 面向 | 傳統 PHP 主題 | FSE 區塊主題 |
|---|---|---|
| 模板格式 | .php 檔案 |
.html 區塊模板檔案 |
| 存放位置 | 主題根目錄 | templates/ 子資料夾 |
| 新增方式 | 手動建立 PHP 檔案 | 後台編輯器 UI 或手動建立 HTML 模板 |
| 模板零件 | get_template_part() 呼叫 |
Template Parts 區塊引用 |
| 樣式設定 | style.css、PHP 輸出 |
theme.json、區塊屬性 |
| 查找規則 | 同一套模板邏輯 | 同一套模板邏輯 |
可以看到,該系統本身並沒有因為 FSE 而改變,改變的只是你用什麼方式來建立和管理這些模板。理解查找鏈的遞退邏輯,在兩種主題架構下都是一樣重要的基礎。
當你想控制某個頁面的版型時,真正要問的問題不是「哪裡可以改」,而是「這個頁面對應的模板查找鏈從哪裡開始」。從最具體的那一層建立模板,就能在不影響其他頁面的前提下,精準控制該頁面的呈現方式。