主題框架可以說是無比強大的!對於非技術型的 WordPress
使用者來說,主題框架使得建立一個獨一無二並看起來像是執行一個量身定製的主題的網站成為可能,並且對於 WordPress
開發者來說,它們能夠幫助你在運用 DRY(切勿複製自己) 原則的同時,快速建立起一個自定義網站。

如果你使用了一段時間的第三方框架之後,發現其程式碼臃腫並缺乏靈活性,並對此感到十分沮喪的話,又或者你僅僅是想能完全掌控你自己的程式碼,那麼建立一個你自己的主題框架無疑就是最好的選擇了!


本系列教程中,你將學習如何去建立你自己的 WordPress
主題框架,從而為你自己或者你的客戶建立一個網站,又或者釋出分享給其他使用者。你將會經過以下幾個階段的學習,包括建立具備框架基礎的父主題、新增額外的
功能、鉤子 (也可以叫 「掛鉤」) 等等。同時,你也將會學習如何在你的子主題和外掛中使用這些技巧,並且知道如何向公眾公開分享你的程式碼等等。

但是在開始之前,你需要知道主題框架是如何工作的,並且到底是什麼使得它們不同於一個標準父主題。

我花了一些時間開發了兩個主題框架,分別應用於兩種型別的客戶網站,隨著時間的推移我不斷地加強和改進它們的一些應用。我也曾與第三方合作開發過一些主題框架。以我的經驗來看,一個主題框架應該有以下幾個主要特點:

  • 通常它主要由一個父主題組成,這個父主題會被設計成能與子主題聯合使用。在某些情況下,父主題也會單獨使用,但是在其他一些情況下,父主題非得和子主題連在一起才能使用——WordPress 法典將其分別定義為 「基礎/入門主題」 和 「程式碼庫」 。
  • 通常它包括一些可以被子主題和外掛利用的鉤子和函式。你的主題框架是整個生態系統的基礎,它還包括部分與框架鉤連的外掛。
  • 如果是給由不會程式設計的使用者使用,它會包括主題選項頁面,這樣可以讓使用者根據自己的需求來自定義主題。設計、佈局、功能和內容等等都可以是多樣且混合的。在某些情況下,一些功能可以經由主題定製器來提供。
  • 它可能包括多個小工具區域,因而非技術使用者可以透過 WordPress 小工具 (包括你專門為框架編寫的透過外掛新增的小工具) 新增內容或程式碼。
  • 它可能還包括指令碼庫功能,如 jQuery 滑塊或燈箱特效。根據你和使用者的需要,你可能會需要在主題框架中將這些合併到一起,或提供一些與框架相鉤連的外掛。
  • 通常它是可擴充套件的,並能用鉤子讓你透過子主題和相關外掛擴充套件其功能。

上述第一點和第二點是最根本的——如果沒有一個父主題,你就不會有一個主題框架。而一個不具備那些鉤子和函式的父主題僅僅只能算是一個基本父主題,不能說是一個真正的主題框架。

以上所述就是關於主題框架的部分了,但它們究竟是如何運作的呢?讓我們先來看看一個主題框架的要素:

  • 父主題和可供選擇的子主題
  • 動作和過濾掛鉤
  • 函式
  • 主題選項
  • 小工具
  • 指令碼
  • 可擴充套件性

父主題和子主題

一個主題框架的主要組成成分是父主題,它可以用兩種方式來設計:

  • 作為初始主題,可以自行透過主題選項介面或主題定製器來自定義。這方面的例子包括 Atahualpa  和 Thematic 。這兩個可以作為不使用子主題的獨立主題的典範。
  • 由於網站的一個基礎需要透過一個子主題來新增,所以如果沒有這個子主題的話,主題框架將不能有效地運用於網站。這樣的例子有 Hybrid Core 和 Genesis 。這些將包括一些基本的程式碼,你通常會在一個有著一系列鉤子和函式的主題中找到,這些鉤子和函式可以透過子主題加以利用,當然也可以透過相關外掛。所有這些便構成了適用於主題框架的 API(應用程式介面) 。

由於主題框架的關鍵特徵之一是 DRY 原則,所以只要有可能,你的父主題就會利用模板部件和包含檔案​,這意味著你可以在你的主題的多個位置訪問同一程式碼。這也使得你在子主題中重新改寫程式碼變得更加容易,因為你只需更換一個模板部件或者是建立一個包含檔案就行了。

暫時我不會在這裡解釋父主題和子主題的概念,因為在 「子主題教程」 中會有相關的介紹。雖然很多主題框架配備了一系列支援自身的子主題,但是如果你想要有其他更適合自己的子主題就只有自己動手開發了。

如果你正在開發自己的主體框架,我建議你建立至少一個 「初始」 子主題,以避免重複參與制定每個專案的工作:你可能會針對不同型別的專案決定去建立多個子主題作為其基礎,例如一些子主題部落格和非部落格網站。

動作掛鉤和過濾掛鉤

當新增自定義程式碼或更改主題的行為方式時,一個主題框架會包括一系列與子主題和外掛相聯絡的掛鉤:


  • 動掛鉤 (Action
    hooks) 會出現在程式碼中的多個地方,使你能夠透過主題框架中編寫的函式將相關程式碼新增到你的模板檔案中,而這個主體框架可以透過子主題來覆蓋。我自己
    的主題框架大量地運用了動作掛鉤,這些掛鉤在所有的模板檔案中都有提供,從而讓使用者可以在諸如小工具區域、聯絡方式等內容上自由發揮,並根據需要隨時隨地
    呼叫行動按鈕和站點特定程式碼。
  • 過濾掛鉤 (Filter hooks) 可以用來改變使用子主題或特定外掛行為的方式,例如自定義迴圈、修改靜態內容等等。任何靜態文字 (或從你的網站外部呼叫的程式碼) 應該包裹在一個過濾器內,以便它可以根據子主題的需要而變化。

在早期階段花一些時間來考慮你想要包含什麼掛鉤是非常值得的,因為這樣你就知道什麼內容需要透過一個鉤子來包含進去,什麼可以直接編寫到你的模板檔案之中。你會在接下來的教程中瞭解到這些。

函式

你的主題框架也可能包括一系列的函式。其中的一些會與你已經定義過的動作掛鉤和過濾掛鉤相鉤連,而其他的一些則是例如模板標籤之類的函式,並且子主題可以使用這些函式。

如果你曾在一些客戶網站上使用過任何自定義函式,那麼你也可以將它們新增到你的主題框架之中。另外,你不必啟用所有的函式:你只需要在你的子網站使用 add_action() 函式啟用跟父主題相關的函式就行。

主題選項

主題選項介面對任何複雜的主題來說都是很有用的,對於非技術使用者來說,更是如此。一些主要的主題框架都會在自己的管理區域內包含多個主題選項介面,其選項包括開關功能、修改佈局、新增內容和改變設計元素,如顏色、背景圖片、字型和標題影像等等。

您可以選擇使用主題定製器來完成您的許多選項,其優點是可以讓你的使用者在定製主題的同時能直接地看到它們的變化。對於 Edupress 主題框架,我便採取了這種做法,其中的學校網站是我和馬克·威爾金森一起開發的。

小工具區域

你是否需要選擇新增一系列小工具區域將取決於你的主題框架的受眾:如果僅僅是你自己或者是一個小團隊的開發人員來使用的話,你也許並不需要在標準側邊欄和頁尾上面新增任何小工具區域。

但是,如果你的主題框架面對的是非技術使用者的話,你可以透過在主題框架的各個地方註冊多個小工具區域從而給予其更多的靈活性。你也可以在網站頭部、標準側欄和頁尾中,在內容之前和/或之後,以及在頁尾下方註冊小工具區域。

我的客戶網站所使用的主題框架在頁尾中包含四個小工具區域:主題會檢查哪些被填充了並據此新增 CSS 類,因此被填充的小工具區域將會各自佔據頁面適當的寬度。

你的小工具區域可能會被直接編寫到你的模板檔案中,或者你可能會決定 (就像我一樣) 透過動作掛鉤將其新增到您網站的相關位置。這意味著它們可以在子主題中被覆蓋,無論是可供選擇性的小工具區域還是自定義程式碼。

指令碼


果一個給定的指令碼很可能被一些建立在你自己主題框架之上的網站所使用,或者如果你的使用者是非技術型的,你又想要提供更多的選項,那麼你可以在你的框架中包
含一些特定的指令碼,如一個滑塊或燈箱特效指令碼。這可以讓使用者無需去安裝額外的外掛,但如果實際上這些指令碼並非必要,那麼這些程式碼就會顯得臃腫,這也是它的
不足之處。

同樣的,這將取決於你的受眾和預期的需求:如果它只是你用來工作的框架,我建議使用這些指令碼開發 (或標識) 這些外掛,什麼時候需要便可以拿來使用。

如果你真的包含了這些指令碼,那麼就等於是包含了在主題選項介面上的啟用和停用選項。

可擴充套件性

如果目前你的框架對某一系列網站非常有用,那麼在將來你也許希望它具有可擴充套件性。構成框架核心的父主題相當於是這個生態系統的心臟,你和你的主題使用者將會為自己的網站進一步完善開發並新增更多的選項和功能。這將包括:

  • 子主題或初始主題——這些名單很可能隨著時間的推移而有所變化,特別是如果你向公眾釋出了你的主題。
  • 專為你的框架設計的外掛往往要透過框架特定的掛鉤啟用。

它還可能包括一些對於其他想要使用你的框架的開發人員有用的檔案:最重要的主題框架配備了大量的檔案,開發人員可以用來自定義他們在框架上建立的網站或者為其他使用者建立一些子主題或外掛。

小結


題框架是 WordPress 開發者武器庫中一個十分強大的工具。正如我們所看到的,它不僅對成千上萬使用其來建立自定義 WordPress
網站的所有者 (非技術型) 來說至關重要,對任何其他的開發者來說,也是一個不可多得的工具,無論這些開發者是想為自己還是為其客戶建立多種多樣的網站。

主題框架通常有一些這樣的特徵:可擴充套件性和靈活性,而且讓你或者你的使用者能夠很容易地透過使用子主題,以及訪問相關函式和你的框架所提供的鉤子來自定義網站。

我們已經知道了主體框架是如何工作的,在這個系列接下來的課程中,你會瞭解你的框架需要做什麼,它需要為誰工作等問題,而這將幫助你決定你的主題框架最合適的發展途徑。