WordPress 子主題還要不要開?2026 區塊主題時代的判斷準則

「客製一律先開子主題」這句話,在台灣站長圈流傳了快十年。早期確實如此,畢竟一改父主題的 functions.php 或樣式檔,下次主題更新就被覆蓋,整晚的工就白做。但這個習慣的時空背景是經典主題(Classic Theme)當道的年代,所有版型靠 PHP 模板組裝,樣式靠 style.css 撐起來。

到了 2026 年,多數新主題已經是區塊主題(Block Theme),核心介面交給 theme.json、HTML 模板與全站編輯器(Full Site Editing,FSE)共同接管。改顏色、字級、間距、版型結構,使用者在後台點一點,資料寫進資料庫,跟主題檔案完全脫鉤,更新時動不到。WordPress 子主題在這個架構下的角色,已經從「萬用安全網」縮成「特定場景才需要的工具」。

這篇不討論怎麼建子主題,網路上現成教學夠多。要釐清的是反方向的問題,什麼時候開子主題其實是多此一舉,什麼時候直接動父主題或全域樣式才是合理選擇,又有哪些情況到了今天依然非開不可。

子主題的本來目的,在區塊主題時代被稀釋了多少

子主題誕生的核心理由只有一個,保護客製不被父主題更新覆蓋。它的機制是讓 WordPress 載入父主題作為底,再用子主題覆寫指定檔案。主題更新時只動父主題目錄,子主題目錄安然無恙。

這個邏輯在經典主題年代成立,是因為所有客製都必須寫進主題檔案,例如 CSS 改在 style.css、版型改在 page.php、自訂功能寫進 functions.php。沒有子主題就沒有安全區,這是事實。

區塊主題把這套邏輯打破了一半。Kinsta 的技術文件指出,使用者透過站台編輯器(Site Editor)改的所有顏色、字體、版型、區塊樣式,資料都存進 wp_options 表的 wp_global_styles 系列紀錄,而不是寫回主題檔案。換句話說,這類客製從一開始就不在主題更新的射程內,子主題能保護的東西,原本就沒被威脅。

剩下還需要靠檔案層級覆寫的範圍,主要落在 theme.json 結構性調整、HTML 模板的版型重組、PHP 鉤子(Hook)邏輯、JavaScript 互動腳本。這四類確實還是子主題的守備範圍,但占整體客製需求的比例,已經跟十年前完全不同。

哪些情況改父主題反而更安全

下面這幾種需求,繞過子主題直接走站台編輯器或全域樣式,反而更穩。客製會寫進資料庫,不會因為下次主題更新而消失,也不會在父主題迭代時跟新版檔案打架。

  • 顏色、字型、間距的全域調整:在站台編輯器的全域樣式(Global Styles)面板直接改,所有套用該設計代幣(Design Token)的區塊一次連動。子主題寫 CSS 覆蓋反而要追兩套來源
  • 單一頁面或模板的版型微調:用區塊編輯器調整對應模板,存檔後同樣寫進資料庫的模板紀錄,父主題模板更新時兩邊獨立存在
  • 特定區塊的樣式覆寫:透過區塊樣式變化(Block Style Variations)功能新增變體,資料存進資料庫,不必為了改一顆按鈕外觀去開整個子主題
  • 頁首頁尾的局部更動:在站台編輯器直接編輯模板組件(Template Part),改完的版本以資料庫紀錄為準,父主題後續更新仍會帶來原始版本,但不會蓋掉你的版本
  • 多套設計風格切換:直接挑父主題附的樣式變化(Style Variation),一鍵切換配色與字體組合,不必為每組風格各自建一份子主題

這幾類動作的共通點是,客製結果都落在資料庫而非檔案。主題更新動的是檔案,兩邊不相交。硬要套子主題反而會讓樣式來源變成「父主題 theme.json、子主題 theme.json、資料庫紀錄」三層疊加,未來除錯時要回頭追哪一層覆蓋哪一層,麻煩遠大於收穫。

全域樣式、樣式變化與 theme.json 各自能承載什麼

要判斷某項客製該走哪條路,先得釐清這三個入口的能力邊界。它們的設計目的不同,能承載的客製深度也不同。

入口 客製範圍 儲存位置 主題更新影響 適合對象
站台編輯器全域樣式 顏色、字型、間距、區塊外觀的視覺層調整 資料庫 wp_global_styles 不受影響 只調設計細節的站長
父主題內建樣式變化 整套配色加字體組合切換,由主題作者預設 主題檔案+切換紀錄存資料庫 父主題若新增變化會自動出現 想換風格但不改個別設定的站長
自訂樣式變化 JSON 自己寫一份 JSON 放進主題 /styles/,覆蓋 theme.json 主題檔案 父主題更新會覆蓋自訂檔,需走子主題 要長期維護同一套客製樣式的站長
子主題 theme.json 結構性覆寫,新增調色盤、字型尺度、區塊預設值 子主題檔案 父主題更新不會動到子主題 要改設計代幣本身的開發者
子主題 HTML 模板與 PHP 版型結構重組、加掛鉤子邏輯、改變主題行為 子主題檔案 父主題更新不會動到子主題 要改模板結構或加程式邏輯的開發者

往下走的判斷順序很單純,視覺層改動先試全域樣式,整套風格切換看父主題的樣式變化是否夠用,到了結構或邏輯層級才開子主題。把這個順序倒過來走,等於用大砲打蚊子。

實務上比較常見的誤判,是把單純的顏色改動寫成子主題裡的 CSS 覆蓋。這種做法在區塊主題環境下會產生兩個問題,一邊是全域樣式面板顯示的色票跟實際渲染不一致,另一邊是主題若升級了顏色變數命名規則,子主題的 CSS 又會失效,等於主動製造維護債。

真正非開子主題不可的四種場景

談完了不必開的情況,反過來看哪些場景非開不可。判斷準則一致,客製是否落在主題檔案本身,而且該檔案會被父主題更新覆蓋。

結構性修改 theme.json

要新增調色盤、改字型尺度(Type Scale)、調整全域間距變數、定義新的區塊預設值,這些動作改的是設計代幣本身。雖然部分可以透過自訂樣式變化承載,但若客製涵蓋多個結構面,或要跟程式邏輯搭配,把 theme.json 放進子主題覆寫父主題版本,是最穩的做法。

關鍵判準是,這份 theme.json 設定要不要長期跟著站台走、需不需要版本控制(Version Control)。要的話開子主題,臨時試色就停在全域樣式。

修改 HTML 模板的版型結構

區塊主題的模板是 .html 檔,存在主題 /templates//parts/ 目錄。透過站台編輯器改模板,新版本存進資料庫沒問題,但若需求是徹底替換掉父主題附的某個模板,例如重寫單篇文章版型或商品頁結構,讓子主題提供同名 .html 檔覆蓋,整個站台後續就以子主題版本為準,不再依賴資料庫紀錄。

對需要把客製打包帶走、部署到其他站台的情況,子主題版本控制比資料庫匯出可控得多。

加掛 PHP 鉤子或自訂功能

functions.php 是子主題的傳統強項。要註冊自訂文章類型(Custom Post Type)、掛 action/filter 鉤子改變 WordPress 行為、串接外部 API、自訂短碼(Shortcode),這些 PHP 邏輯沒辦法透過站台編輯器處理。寫進父主題會被更新覆蓋,獨立外掛是另一條路但耦合度比較高,子主題仍是首選。

例外是規模較大或會跨主題共用的功能,建議獨立成外掛,跟主題解耦。

載入自訂 JavaScript 與資產

要加追蹤腳本、互動元件、第三方 SDK,路徑跟 PHP 一樣。透過子主題的 functions.php 用 wp_enqueue_script 註冊,檔案放子主題目錄,整套客製有版本、可追蹤,也不會被父主題更新覆蓋。

這四種場景的共通點是客製本質就在檔案層,跟資料庫無關。只要符合這個條件,子主題依然是 2026 年最直接的解答。

客製前的判斷順序

回到開頭的問題,子主題到底該不該開。答案不是二選一,而是判斷順序的問題。

先問客製的本質是視覺層還是結構層。改顏色、字體、間距、單頁版型屬於視覺層,先走全域樣式或樣式變化,資料留在資料庫,主題更新動不到。改 theme.json 結構、HTML 模板、PHP 邏輯、JavaScript 屬於結構層,才考慮子主題。

接著問客製要不要長期維護、要不要跨站台搬移。臨時調整的視覺差異留在資料庫足夠,要納入版本控制、要在多個環境部署的客製,檔案層級的子主題比資料庫匯出可靠。

最後問父主題本身的設計品質。設計周到的區塊主題,theme.json 結構完整、樣式變化覆蓋多種風格、模板組件切分合理,這時候子主題的必要性會再降一層;設計粗糙的父主題,連最基本的全域樣式都調不開,那也許該換主題而不是開子主題硬補。

「客製一律先開子主題」的時代過去了。WordPress 子主題在 2026 年仍有它的位置,但只在它真正能解決問題的場景上發揮,不該繼續被當成所有客製需求的預設答案。

相關文章
標籤: WordPress 子主題, 區塊主題, 全站編輯器, theme.json, 站台客製