天天看點

WordPress 主題架構是如何工作的

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

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

在本系列教程中,你将學習如何去建立你自己的 WordPress 主題架構,進而為你自己或者你的客戶建立一個網站,又或者釋出分享給其他使用者。你将會經過以下幾個階段的學習,包括建立具備架構基礎的父主題、添加額外的功能、鈎子(也可以叫“挂鈎”)等等。同時,你也将會學習如何在你的子主題和插件中使用這些技巧,并且知道如何向公衆公開分享你的代碼等等。

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

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

  • 通常它主要由一個父主題組成,這個父主題會被設計成能與子主題聯合使用。在某些情況下,父主題也會單獨使用,但是在其他一些情況下,父主題非得和子主題連在一起才能使用——WordPress 法典将其分别定義為“基礎/入門主題”和“代碼庫”。
  • 通常它包括一些可以被子主題和插件利用的鈎子和函數。你的主題架構是整個生态系統的基礎,它還包括部分與架構鈎連的插件。
  • 如果是給由不會程式設計的使用者使用,它會包括主題選項頁面,這樣可以讓使用者根據自己的需求來自定義主題。設計、布局、功能和内容等等都可以是多樣且混合的。在某些情況下,一些功能可以經由主題定制器來提供。
  • 它可能包括多個小工具區域,因而非技術使用者可以通過 WordPress 小工具(包括你專門為架構編寫的通過插件添加的小工具)添加内容或代碼。
  • 它可能還包括腳本庫功能,如 jQuery 滑塊或燈箱特效。根據你和使用者的需要,你可能會需要在主題架構中将這些合并到一起,或提供一些與架構相鈎連的插件。
  • 通常它是可擴充的,并能用鈎子讓你通過子主題和相關插件擴充其功能。

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

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

  • 父主題和可供選擇的子主題
  • 動作和過濾挂鈎
  • 函數
  • 主題選項
  • 小工具
  • 腳本
  • 可擴充性

AD:Web Studio

父主題和子主題

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

  • 作為初始主題,可以自行通過主題選項界面或主題定制器來自定義。這方面的例子包括 Atahualpa  和 Thematic。這兩個可以作為不使用子主題的獨立主題的典範。
  • 由于網站的一個基礎需要通過一個子主題來添加,是以如果沒有這個子主題的話,主題架構将不能有效地運用于網站。這樣的例子有Hybrid Core 和 Genesis。這些将包括一些基本的代碼,你通常會在一個有着一系列鈎子和函數的主題中找到,這些鈎子和函數可以通過子主題加以利用,當然也可以通過相關插件。所有這些便構成了适用于主題架構的API(應用程式界面)。

由于主題架構的關鍵特征之一是DRY原則,是以隻要有可能,你的父主題就會利用模闆部件和包含檔案​,這意味着你可以在你的主題的多個位置通路同一代碼。這也使得你在子主題中重新改寫代碼變得更加容易,因為你隻需更換一個模闆部件或者是建立一個包含檔案就行了。

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

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

動作挂鈎和過濾挂鈎

當添加自定義代碼或更改主題的行為方式時,一個主題架構會包括一系列與子主題和插件相聯系的挂鈎:

  • 行動挂鈎(Action hooks)會出現在代碼中的多個地方,使你能夠通過主題架構中編寫的函數将相關代碼添加到你的模闆檔案中,而這個主體架構可以通過子主題來覆寫。我自己的主題架構大量地運用了動作挂鈎,這些挂鈎在所有的模闆檔案中都有提供,進而讓使用者可以在諸如小工具區域、聯系方式等内容上自由發揮,并根據需要随時随地調用行動按鈕和站點特定代碼。
  • 過濾挂鈎(Filter hooks)可以用來改變使用子主題或特定插件行為的方式,例如自定義循環、修改靜态内容等等。任何靜态文本(或從你的網站外部調用的代碼)應該包裹在一個過濾器内,以便它可以根據子主題的需要而變化。

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

函數

你的主題架構也可能包括一系列的函數。其中的一些會與你已經定義過的動作挂鈎和過濾挂鈎相鈎連,而其他的一些則是例如模闆标簽之類的函數,并且子主題可以使用這些函數。

如果你曾在一些客戶網站上使用過任何自定義函數,那麼你也可以将它們添加到你的主題架構之中。另外,你不必激活所有的函數:你隻需要在你的子網站使用 add_action() 函數激活跟父主題相關的函數就行。

主題選項

主題選項界面對任何複雜的主題來說都是很有用的,對于非技術使用者來說,更是如此。一些主要的主題架構都會在自己的管理區域内包含多個主題選項界面,其選項包括開關功能、修改布局、添加内容和改變設計元素,如顔色、背景圖檔、字型和标題圖像等等。

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

小工具區域

你是否需要選擇添加一系列小工具區域将取決于你的主題架構的閱聽人:如果僅僅是你自己或者是一個小團隊的開發人員來使用的話,你也許并不需要在标準側邊欄和頁腳上面添加任何小工具區域。

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

我的客戶網站所使用的主題架構在頁腳中包含四個小工具區域:主題會檢查哪些被填充了并據此添加CSS類,是以被填充的小工具區域将會各自占據頁面适當的寬度。

你的小工具區域可能會被直接編寫到你的模闆檔案中,或者你可能會決定(就像我一樣)通過動作挂鈎将其添加到您網站的相關位置。這意味着它們可以在子主題中被覆寫,無論是可供選擇性的小工具區域還是自定義代碼。

腳本

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

同樣的,這将取決于你的閱聽人和預期的需求:如果它隻是你用來工作的架構,我建議使用這些腳本開發(或辨別)這些插件,什麼時候需要便可以拿來使用。

如果你真的包含了這些腳本,那麼就等于是包含了在主題選項界面上的啟用和禁用選項。

可擴充性

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

  • 子主題或初始主題——這些名單很可能随着時間的推移而有所變化,特别是如果你向公衆釋出了你的主題。
  • 專為你的架構設計的插件往往要通過架構特定的挂鈎激活。

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

小結

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

主題架構通常有一些這樣的特征:可擴充性和靈活性,而且讓你或者你的使用者能夠很容易地通過使用子主題,以及通路相關函數和你的架構所提供的鈎子來自定義網站。

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