主題框架可以說(shuō)是無(wú)比強(qiáng)大的!對(duì)于非技術(shù)型的 WordPress 用戶(hù)來(lái)說(shuō),主題框架使得建立一個(gè)獨(dú)一無(wú)二并看起來(lái)像是運(yùn)行一個(gè)量身定制的主題的網(wǎng)站成為可能,并且對(duì)于 WordPress 開(kāi)發(fā)者來(lái)說(shuō),它們能夠幫助你在運(yùn)用DRY(切勿復(fù)制自己)原則的同時(shí),快速建立起一個(gè)自定義網(wǎng)站。
如果你使用了一段時(shí)間的第三方框架之后,發(fā)現(xiàn)其代碼臃腫并缺乏靈活性,并對(duì)此感到十分沮喪的話(huà),又或者你僅僅是想能完全掌控你自己的代碼,那么建立一個(gè)你自己的主題框架無(wú)疑就是最好的選擇了!
在本系列教程中,你將學(xué)習(xí)如何去創(chuàng)建你自己的 WordPress 主題框架,從而為你自己或者你的客戶(hù)建立一個(gè)網(wǎng)站,又或者發(fā)布分享給其他用戶(hù)。你將會(huì)經(jīng)過(guò)以下幾個(gè)階段的學(xué)習(xí),包括創(chuàng)建具備框架基礎(chǔ)的父主題、添加額外的功能、鉤子(也可以叫“掛鉤”)等等。同時(shí),你也將會(huì)學(xué)習(xí)如何在你的子主題和插件中使用這些技巧,并且知道如何向公眾公開(kāi)分享你的代碼等等。
但是在開(kāi)始之前,你需要知道主題框架是如何工作的,并且到底是什么使得它們不同于一個(gè)標(biāo)準(zhǔn)父主題。
我花了一些時(shí)間開(kāi)發(fā)了兩個(gè)主題框架,分別應(yīng)用于兩種類(lèi)型的客戶(hù)網(wǎng)站,隨著時(shí)間的推移我不斷地加強(qiáng)和改進(jìn)它們的一些應(yīng)用。我也曾與第三方合作開(kāi)發(fā)過(guò)一些主題框架。以我的經(jīng)驗(yàn)來(lái)看,一個(gè)主題框架應(yīng)該有以下幾個(gè)主要特點(diǎn):
- 通常它主要由一個(gè)父主題組成,這個(gè)父主題會(huì)被設(shè)計(jì)成能與子主題聯(lián)合使用。在某些情況下,父主題也會(huì)單獨(dú)使用,但是在其他一些情況下,父主題非得和子主題連在一起才能使用——WordPress 法典將其分別定義為“基礎(chǔ)/入門(mén)主題”和“代碼庫(kù)”。
- 通常它包括一些可以被子主題和插件利用的鉤子和函數(shù)。你的主題框架是整個(gè)生態(tài)系統(tǒng)的基礎(chǔ),它還包括部分與框架鉤連的插件。
- 如果是給由不會(huì)編程的用戶(hù)使用,它會(huì)包括主題選項(xiàng)頁(yè)面,這樣可以讓用戶(hù)根據(jù)自己的需求來(lái)自定義主題。設(shè)計(jì)、布局、功能和內(nèi)容等等都可以是多樣且混合的。在某些情況下,一些功能可以經(jīng)由主題定制器來(lái)提供。
- 它可能包括多個(gè)小工具區(qū)域,因而非技術(shù)用戶(hù)可以通過(guò) WordPress 小工具(包括你專(zhuān)門(mén)為框架編寫(xiě)的通過(guò)插件添加的小工具)添加內(nèi)容或代碼。
- 它可能還包括腳本庫(kù)功能,如 jQuery 滑塊或燈箱特效。根據(jù)你和用戶(hù)的需要,你可能會(huì)需要在主題框架中將這些合并到一起,或提供一些與框架相鉤連的插件。
- 通常它是可擴(kuò)展的,并能用鉤子讓你通過(guò)子主題和相關(guān)插件擴(kuò)展其功能。
上述第一點(diǎn)和第二點(diǎn)是最根本的——如果沒(méi)有一個(gè)父主題,你就不會(huì)有一個(gè)主題框架。而一個(gè)不具備那些鉤子和函數(shù)的父主題僅僅只能算是一個(gè)基本父主題,不能說(shuō)是一個(gè)真正的主題框架。
以上所述就是關(guān)于主題框架的部分了,但它們究竟是如何運(yùn)作的呢?讓我們先來(lái)看看一個(gè)主題框架的要素:
- 父主題和可供選擇的子主題
- 動(dòng)作和過(guò)濾掛鉤
- 函數(shù)
- 主題選項(xiàng)
- 小工具
- 腳本
- 可擴(kuò)展性
父主題和子主題
一個(gè)主題框架的主要組成成分是父主題,它可以用兩種方式來(lái)設(shè)計(jì):
- 作為初始主題,可以自行通過(guò)主題選項(xiàng)界面或主題定制器來(lái)自定義。這方面的例子包括 Atahualpa 和 Thematic。這兩個(gè)可以作為不使用子主題的獨(dú)立主題的典范。
- 由于網(wǎng)站的一個(gè)基礎(chǔ)需要通過(guò)一個(gè)子主題來(lái)添加,所以如果沒(méi)有這個(gè)子主題的話(huà),主題框架將不能有效地運(yùn)用于網(wǎng)站。這樣的例子有 Hybrid Core 和 Genesis。這些將包括一些基本的代碼,你通常會(huì)在一個(gè)有著一系列鉤子和函數(shù)的主題中找到,這些鉤子和函數(shù)可以通過(guò)子主題加以利用,當(dāng)然也可以通過(guò)相關(guān)插件。所有這些便構(gòu)成了適用于主題框架的API(應(yīng)用程序界面)。
由于主題框架的關(guān)鍵特征之一是DRY原則,所以只要有可能,你的父主題就會(huì)利用模板部件和包含文件?,這意味著你可以在你的主題的多個(gè)位置訪問(wèn)同一代碼。這也使得你在子主題中重新改寫(xiě)代碼變得更加容易,因?yàn)槟阒恍韪鼡Q一個(gè)模板部件或者是創(chuàng)建一個(gè)包含文件就行了。
暫時(shí)我不會(huì)在這里解釋父主題和子主題的概念,因?yàn)樵凇?a target="_blank">子主題教程”中會(huì)有相關(guān)的介紹。雖然很多主題框架配備了一系列支持自身的子主題,但是如果你想要有其他更適合自己的子主題就只有自己動(dòng)手開(kāi)發(fā)了。
如果你正在開(kāi)發(fā)自己的主體框架,我建議你創(chuàng)建至少一個(gè)“初始”子主題,以避免重復(fù)參與制定每個(gè)項(xiàng)目的工作:你可能會(huì)針對(duì)不同類(lèi)型的項(xiàng)目決定去創(chuàng)建多個(gè)子主題作為其基礎(chǔ),例如一些子主題博客和非博客網(wǎng)站。
動(dòng)作掛鉤和過(guò)濾掛鉤
當(dāng)添加自定義代碼或更改主題的行為方式時(shí),一個(gè)主題框架會(huì)包括一系列與子主題和插件相聯(lián)系的掛鉤:
- 行動(dòng)掛鉤(Action hooks)會(huì)出現(xiàn)在代碼中的多個(gè)地方,使你能夠通過(guò)主題框架中編寫(xiě)的函數(shù)將相關(guān)代碼添加到你的模板文件中,而這個(gè)主體框架可以通過(guò)子主題來(lái)覆蓋。我自己的主題框架大量地運(yùn)用了動(dòng)作掛鉤,這些掛鉤在所有的模板文件中都有提供,從而讓用戶(hù)可以在諸如小工具區(qū)域、聯(lián)系方式等內(nèi)容上自由發(fā)揮,并根據(jù)需要隨時(shí)隨地調(diào)用行動(dòng)按鈕和站點(diǎn)特定代碼。
- 過(guò)濾掛鉤(Filter hooks)可以用來(lái)改變使用子主題或特定插件行為的方式,例如自定義循環(huán)、修改靜態(tài)內(nèi)容等等。任何靜態(tài)文本(或從你的網(wǎng)站外部調(diào)用的代碼)應(yīng)該包裹在一個(gè)過(guò)濾器內(nèi),以便它可以根據(jù)子主題的需要而變化。
在早期階段花一些時(shí)間來(lái)考慮你想要包含什么掛鉤是非常值得的,因?yàn)檫@樣你就知道什么內(nèi)容需要通過(guò)一個(gè)鉤子來(lái)包含進(jìn)去,什么可以直接編寫(xiě)到你的模板文件之中。你會(huì)在接下來(lái)的教程中了解到這些。
函數(shù)
你的主題框架也可能包括一系列的函數(shù)。其中的一些會(huì)與你已經(jīng)定義過(guò)的動(dòng)作掛鉤和過(guò)濾掛鉤相鉤連,而其他的一些則是例如模板標(biāo)簽之類(lèi)的函數(shù),并且子主題可以使用這些函數(shù)。
如果你曾在一些客戶(hù)網(wǎng)站上使用過(guò)任何自定義函數(shù),那么你也可以將它們添加到你的主題框架之中。另外,你不必激活所有的函數(shù):你只需要在你的子網(wǎng)站使用 add_action() 函數(shù)激活跟父主題相關(guān)的函數(shù)就行。
主題選項(xiàng)
主題選項(xiàng)界面對(duì)任何復(fù)雜的主題來(lái)說(shuō)都是很有用的,對(duì)于非技術(shù)用戶(hù)來(lái)說(shuō),更是如此。一些主要的主題框架都會(huì)在自己的管理區(qū)域內(nèi)包含多個(gè)主題選項(xiàng)界面,其選項(xiàng)包括開(kāi)關(guān)功能、修改布局、添加內(nèi)容和改變?cè)O(shè)計(jì)元素,如顏色、背景圖片、字體和標(biāo)題圖像等等。
您可以選擇使用主題定制器來(lái)完成您的許多選項(xiàng),其優(yōu)點(diǎn)是可以讓你的用戶(hù)在定制主題的同時(shí)能直接地看到它們的變化。對(duì)于Edupress主題框架,我便采取了這種做法,其中的學(xué)校網(wǎng)站是我和馬克·威爾金森一起開(kāi)發(fā)的。
小工具區(qū)域
你是否需要選擇添加一系列小工具區(qū)域?qū)⑷Q于你的主題框架的受眾:如果僅僅是你自己或者是一個(gè)小團(tuán)隊(duì)的開(kāi)發(fā)人員來(lái)使用的話(huà),你也許并不需要在標(biāo)準(zhǔn)側(cè)邊欄和頁(yè)腳上面添加任何小工具區(qū)域。
但是,如果你的主題框架面對(duì)的是非技術(shù)用戶(hù)的話(huà),你可以通過(guò)在主題框架的各個(gè)地方注冊(cè)多個(gè)小工具區(qū)域從而給予其更多的靈活性。你也可以在網(wǎng)站頭部、標(biāo)準(zhǔn)側(cè)欄和頁(yè)腳中,在內(nèi)容之前和/或之后,以及在頁(yè)腳下方注冊(cè)小工具區(qū)域。
我的客戶(hù)網(wǎng)站所使用的主題框架在頁(yè)腳中包含四個(gè)小工具區(qū)域:主題會(huì)檢查哪些被填充了并據(jù)此添加CSS類(lèi),因此被填充的小工具區(qū)域?qū)?huì)各自占據(jù)頁(yè)面適當(dāng)?shù)膶挾取?/p>
你的小工具區(qū)域可能會(huì)被直接編寫(xiě)到你的模板文件中,或者你可能會(huì)決定(就像我一樣)通過(guò)動(dòng)作掛鉤將其添加到您網(wǎng)站的相關(guān)位置。這意味著它們可以在子主題中被覆蓋,無(wú)論是可供選擇性的小工具區(qū)域還是自定義代碼。
腳本
如果一個(gè)給定的腳本很可能被一些建立在你自己主題框架之上的網(wǎng)站所使用,或者如果你的用戶(hù)是非技術(shù)型的,你又想要提供更多的選項(xiàng),那么你可以在你的框架中包含一些特定的腳本,如一個(gè)滑塊或燈箱特效腳本。這可以讓用戶(hù)無(wú)需去安裝額外的插件,但如果實(shí)際上這些腳本并非必要,那么這些代碼就會(huì)顯得臃腫,這也是它的不足之處。
同樣的,這將取決于你的受眾和預(yù)期的需求:如果它只是你用來(lái)工作的框架,我建議使用這些腳本開(kāi)發(fā)(或標(biāo)識(shí))這些插件,什么時(shí)候需要便可以拿來(lái)使用。
如果你真的包含了這些腳本,那么就等于是包含了在主題選項(xiàng)界面上的啟用和禁用選項(xiàng)。
可擴(kuò)展性
如果目前你的框架對(duì)某一系列網(wǎng)站非常有用,那么在將來(lái)你也許希望它具有可擴(kuò)展性。構(gòu)成框架核心的父主題相當(dāng)于是這個(gè)生態(tài)系統(tǒng)的心臟,你和你的主題用戶(hù)將會(huì)為自己的網(wǎng)站進(jìn)一步完善開(kāi)發(fā)并添加更多的選項(xiàng)和功能。這將包括:
- 子主題或初始主題——這些名單很可能隨著時(shí)間的推移而有所變化,特別是如果你向公眾發(fā)布了你的主題。
- 專(zhuān)為你的框架設(shè)計(jì)的插件往往要通過(guò)框架特定的掛鉤激活。
它還可能包括一些對(duì)于其他想要使用你的框架的開(kāi)發(fā)人員有用的文檔:最重要的主題框架配備了大量的文檔,開(kāi)發(fā)人員可以用來(lái)自定義他們?cè)诳蚣苌辖⒌木W(wǎng)站或者為其他用戶(hù)創(chuàng)建一些子主題或插件。
小結(jié)
主題框架是 WordPress 開(kāi)發(fā)者武器庫(kù)中一個(gè)十分強(qiáng)大的工具。正如我們所看到的,它不僅對(duì)成千上萬(wàn)使用其來(lái)創(chuàng)建自定義 WordPress 網(wǎng)站的所有者(非技術(shù)型)來(lái)說(shuō)至關(guān)重要,對(duì)任何其他的開(kāi)發(fā)者來(lái)說(shuō),也是一個(gè)不可多得的工具,無(wú)論這些開(kāi)發(fā)者是想為自己還是為其客戶(hù)創(chuàng)建多種多樣的網(wǎng)站。
主題框架通常有一些這樣的特征:可擴(kuò)展性和靈活性,而且讓你或者你的用戶(hù)能夠很容易地通過(guò)使用子主題,以及訪問(wèn)相關(guān)函數(shù)和你的框架所提供的鉤子來(lái)自定義網(wǎng)站。
我們已經(jīng)知道了主體框架是如何工作的,在這個(gè)系列接下來(lái)的課程中,你會(huì)了解你的框架需要做什么,它需要為誰(shuí)工作等問(wèn)題,而這將幫助你決定你的主題框架最合適的發(fā)展途徑。
原文出自:http://code.tutsplus.com/tutorials/how-theme-frameworks-actually-work–cms-21349
由 stonetan@WordPress大學(xué) 原創(chuàng)翻譯,未經(jīng)允許,禁止轉(zhuǎn)載和采用本譯文。
您已閱讀完《開(kāi)發(fā)你的 WordPress 主題框架(共10篇)》專(zhuān)題的第 1 篇。請(qǐng)繼續(xù)閱讀該專(zhuān)題下面的文章:






說(shuō)實(shí)話(huà),看了也相當(dāng)于沒(méi)看,壓根看不懂這翻譯和含義
開(kāi)發(fā)屬于自己的主題框架還是很不錯(cuò),但網(wǎng)絡(luò)上有很多免費(fèi)的主題框架相當(dāng)不錯(cuò)。
好像好厲害的樣子~
翻譯過(guò)來(lái)的,不是很用心
show msg
學(xué)習(xí)了