主题框架可以说是无比强大的!对于非技术型的 WordPress
用户来说,主题框架使得建立一个独一无二并看起来像是运行一个量身定制的主题的网站成为可能,并且对于 WordPress
开发者来说,它们能够帮助你在运用 DRY(切勿复制自己) 原则的同时,快速建立起一个自定义网站。
如果你使用了一段时间的第三方框架之后,发现其代码臃肿并缺乏灵活性,并对此感到十分沮丧的话,又或者你仅仅是想能完全掌控你自己的代码,那么建立一个你自己的主题框架无疑就是最好的选择了!
在
本系列教程中,你将学习如何去创建你自己的 WordPress
主题框架,从而为你自己或者你的客户建立一个网站,又或者发布分享给其他用户。你将会经过以下几个阶段的学习,包括创建具备框架基础的父主题、添加额外的
功能、钩子 (也可以叫 「挂钩」) 等等。同时,你也将会学习如何在你的子主题和插件中使用这些技巧,并且知道如何向公众公开分享你的代码等等。
但是在开始之前,你需要知道主题框架是如何工作的,并且到底是什么使得它们不同于一个标准父主题。
我花了一些时间开发了两个主题框架,分别应用于两种类型的客户网站,随着时间的推移我不断地加强和改进它们的一些应用。我也曾与第三方合作开发过一些主题框架。以我的经验来看,一个主题框架应该有以下几个主要特点:
- 通常它主要由一个父主题组成,这个父主题会被设计成能与子主题联合使用。在某些情况下,父主题也会单独使用,但是在其他一些情况下,父主题非得和子主题连在一起才能使用——WordPress 法典将其分别定义为 「基础/入门主题」 和 「代码库」 。
- 通常它包括一些可以被子主题和插件利用的钩子和函数。你的主题框架是整个生态系统的基础,它还包括部分与框架钩连的插件。
- 如果是给由不会编程的用户使用,它会包括主题选项页面,这样可以让用户根据自己的需求来自定义主题。设计、布局、功能和内容等等都可以是多样且混合的。在某些情况下,一些功能可以经由主题定制器来提供。
- 它可能包括多个小工具区域,因而非技术用户可以通过 WordPress 小工具 (包括你专门为框架编写的通过插件添加的小工具) 添加内容或代码。
- 它可能还包括脚本库功能,如 jQuery 滑块或灯箱特效。根据你和用户的需要,你可能会需要在主题框架中将这些合并到一起,或提供一些与框架相钩连的插件。
- 通常它是可扩展的,并能用钩子让你通过子主题和相关插件扩展其功能。
上述第一点和第二点是最根本的——如果没有一个父主题,你就不会有一个主题框架。而一个不具备那些钩子和函数的父主题仅仅只能算是一个基本父主题,不能说是一个真正的主题框架。
以上所述就是关于主题框架的部分了,但它们究竟是如何运作的呢?让我们先来看看一个主题框架的要素:
- 父主题和可供选择的子主题
- 动作和过滤挂钩
- 函数
- 主题选项
- 小工具
- 脚本
- 可扩展性
父主题和子主题
一个主题框架的主要组成成分是父主题,它可以用两种方式来设计:
- 作为初始主题,可以自行通过主题选项界面或主题定制器来自定义。这方面的例子包括 Atahualpa 和 Thematic 。这两个可以作为不使用子主题的独立主题的典范。
- 由于网站的一个基础需要通过一个子主题来添加,所以如果没有这个子主题的话,主题框架将不能有效地运用于网站。这样的例子有 Hybrid Core 和 Genesis 。这些将包括一些基本的代码,你通常会在一个有着一系列钩子和函数的主题中找到,这些钩子和函数可以通过子主题加以利用,当然也可以通过相关插件。所有这些便构成了适用于主题框架的 API(应用程序界面) 。
由于主题框架的关键特征之一是 DRY 原则,所以只要有可能,你的父主题就会利用模板部件和包含文件,这意味着你可以在你的主题的多个位置访问同一代码。这也使得你在子主题中重新改写代码变得更加容易,因为你只需更换一个模板部件或者是创建一个包含文件就行了。
暂时我不会在这里解释父主题和子主题的概念,因为在 「子主题教程」 中会有相关的介绍。虽然很多主题框架配备了一系列支持自身的子主题,但是如果你想要有其他更适合自己的子主题就只有自己动手开发了。
如果你正在开发自己的主体框架,我建议你创建至少一个 「初始」 子主题,以避免重复参与制定每个项目的工作:你可能会针对不同类型的项目决定去创建多个子主题作为其基础,例如一些子主题博客和非博客网站。
动作挂钩和过滤挂钩
当添加自定义代码或更改主题的行为方式时,一个主题框架会包括一系列与子主题和插件相联系的挂钩:
- 行
动挂钩 (Action
hooks) 会出现在代码中的多个地方,使你能够通过主题框架中编写的函数将相关代码添加到你的模板文件中,而这个主体框架可以通过子主题来覆盖。我自己
的主题框架大量地运用了动作挂钩,这些挂钩在所有的模板文件中都有提供,从而让用户可以在诸如小工具区域、联系方式等内容上自由发挥,并根据需要随时随地
调用行动按钮和站点特定代码。 - 过滤挂钩 (Filter hooks) 可以用来改变使用子主题或特定插件行为的方式,例如自定义循环、修改静态内容等等。任何静态文本 (或从你的网站外部调用的代码) 应该包裹在一个过滤器内,以便它可以根据子主题的需要而变化。
在早期阶段花一些时间来考虑你想要包含什么挂钩是非常值得的,因为这样你就知道什么内容需要通过一个钩子来包含进去,什么可以直接编写到你的模板文件之中。你会在接下来的教程中了解到这些。
函数
你的主题框架也可能包括一系列的函数。其中的一些会与你已经定义过的动作挂钩和过滤挂钩相钩连,而其他的一些则是例如模板标签之类的函数,并且子主题可以使用这些函数。
如果你曾在一些客户网站上使用过任何自定义函数,那么你也可以将它们添加到你的主题框架之中。另外,你不必激活所有的函数:你只需要在你的子网站使用 add_action() 函数激活跟父主题相关的函数就行。
主题选项
主题选项界面对任何复杂的主题来说都是很有用的,对于非技术用户来说,更是如此。一些主要的主题框架都会在自己的管理区域内包含多个主题选项界面,其选项包括开关功能、修改布局、添加内容和改变设计元素,如颜色、背景图片、字体和标题图像等等。
您可以选择使用主题定制器来完成您的许多选项,其优点是可以让你的用户在定制主题的同时能直接地看到它们的变化。对于 Edupress 主题框架,我便采取了这种做法,其中的学校网站是我和马克·威尔金森一起开发的。
小工具区域
你是否需要选择添加一系列小工具区域将取决于你的主题框架的受众:如果仅仅是你自己或者是一个小团队的开发人员来使用的话,你也许并不需要在标准侧边栏和页脚上面添加任何小工具区域。
但是,如果你的主题框架面对的是非技术用户的话,你可以通过在主题框架的各个地方注册多个小工具区域从而给予其更多的灵活性。你也可以在网站头部、标准侧栏和页脚中,在内容之前和/或之后,以及在页脚下方注册小工具区域。
我的客户网站所使用的主题框架在页脚中包含四个小工具区域:主题会检查哪些被填充了并据此添加 CSS 类,因此被填充的小工具区域将会各自占据页面适当的宽度。
你的小工具区域可能会被直接编写到你的模板文件中,或者你可能会决定 (就像我一样) 通过动作挂钩将其添加到您网站的相关位置。这意味着它们可以在子主题中被覆盖,无论是可供选择性的小工具区域还是自定义代码。
脚本
如
果一个给定的脚本很可能被一些建立在你自己主题框架之上的网站所使用,或者如果你的用户是非技术型的,你又想要提供更多的选项,那么你可以在你的框架中包
含一些特定的脚本,如一个滑块或灯箱特效脚本。这可以让用户无需去安装额外的插件,但如果实际上这些脚本并非必要,那么这些代码就会显得臃肿,这也是它的
不足之处。
同样的,这将取决于你的受众和预期的需求:如果它只是你用来工作的框架,我建议使用这些脚本开发 (或标识) 这些插件,什么时候需要便可以拿来使用。
如果你真的包含了这些脚本,那么就等于是包含了在主题选项界面上的启用和禁用选项。
可扩展性
如果目前你的框架对某一系列网站非常有用,那么在将来你也许希望它具有可扩展性。构成框架核心的父主题相当于是这个生态系统的心脏,你和你的主题用户将会为自己的网站进一步完善开发并添加更多的选项和功能。这将包括:
- 子主题或初始主题——这些名单很可能随着时间的推移而有所变化,特别是如果你向公众发布了你的主题。
- 专为你的框架设计的插件往往要通过框架特定的挂钩激活。
它还可能包括一些对于其他想要使用你的框架的开发人员有用的文档:最重要的主题框架配备了大量的文档,开发人员可以用来自定义他们在框架上建立的网站或者为其他用户创建一些子主题或插件。
小结
主
题框架是 WordPress 开发者武器库中一个十分强大的工具。正如我们所看到的,它不仅对成千上万使用其来创建自定义 WordPress
网站的所有者 (非技术型) 来说至关重要,对任何其他的开发者来说,也是一个不可多得的工具,无论这些开发者是想为自己还是为其客户创建多种多样的网站。
主题框架通常有一些这样的特征:可扩展性和灵活性,而且让你或者你的用户能够很容易地通过使用子主题,以及访问相关函数和你的框架所提供的钩子来自定义网站。
我们已经知道了主体框架是如何工作的,在这个系列接下来的课程中,你会了解你的框架需要做什么,它需要为谁工作等问题,而这将帮助你决定你的主题框架最合适的发展途径。