十多年前,我做了一个关于 WordPress 设计 的三部分视频系列。然后我以同样的精神制作了其他系列,例如视频直播 整个 v10 重设计、朋友的网站,甚至 写了一本书。不过,这些视频现在有点过时了。如果您刚开始接触 WordPress 主题开发,观看这些视频仍然可以学习到一些东西,但有些部分会感觉非常老旧(旧的用户界面和旧版本的软件)。不过,所有代码仍然有效,因为 WordPress 在向后兼容性方面做得很好。我仍然会收到一些人告诉我,这些视频对他们很有帮助。
但随着时间的推移,最近有人问我我现在会推荐哪些资源,我想我会四处看看,看看哪些资源对我来说看起来不错。

我们正在谈论谁?
WordPress 开发人员存在一个 *范围*,从完全不懂代码或几乎不碰代码的人,到构建自定义一切的硬核编程极客。
- 选择一个看起来不错的主题,然后使用它。
- 🤷♂️
- 🤷♂️
- 🤷♂️
- 🤷♂️
- 硬核编程极客。
我无法与该范围两端的任何人进行交流。在 *中间* 有一个完整的世界。他们可以编写代码,但他们不是计算机科学专业人员。他们是 *完成工作* 的人。也许是这样的
- 选择一个可用的主题,然后使用它。
- 从一个主题开始,使用内置工具对其进行一些自定义。
- 从一个主题开始,使用代码对其进行修改以实现您需要实现的功能。
- 从头开始,构建您需要的内容。
- 从头开始,构建一个高度定制的网站。
- 硬核编程极客。
我一直都在 #4 左右,我认为这是一个不错的甜蜜点。我尝试让现成的 WordPress 和大型流行插件承担繁重的工作,但我将自带前端(HTML、CSS 和 JavaScript)并自定义我必须自定义的内容。我正在制作模板。我正在编写查询。我正在构建模块。我正在尽可能地进行模块化。
我在这个区域感觉很强大。我几乎可以自己构建很多网站。**那么,现在有哪些资源可以帮助您学习这种类型的 WordPress 主题开发呢?**让我看看我能不能找到一些。
老方法,边做边学
实践出真知。在实践中学习。在我的生活中,我在这方面学到了很多东西。
这里的技巧是将 WordPress 安装到一个实时服务器上,然后玩弄设置、插件、自定义器,并编辑主题文件本身以使网站执行某些操作。您会在这些主题文件中找到 HTML——修改它!您会看到 PHP 代码正在输出内容。您可以判断出什么内容以及如何操作它吗?您会在主题中找到一个 CSS 文件——编辑它!

官方文档可以在一定程度上帮助您
- 如何安装 WordPress
- 开发者资源
- 遇到困难时使用 Google 搜索
在某种程度上,我赞成 *现场操作*(在生产网站上),因为当您是初学者时,它会让您正在做的事情产生一种 *真实感*。风险很高,让您了解自己的能力。*当我进行这些更改时,全世界任何拥有互联网连接的人都可以看到。*
在我初学的时候,我购买了一个域名和主机,将 WordPress 安装到该主机上,使用 SFTP 凭据登录,并在实时文件上进行实际操作。我使用的是 Coda,它仍然是一款流行的应用程序,并且在我撰写本文时正在积极开发新版本。

希望风险是真实的,但 *较低*。例如,您正在处理一个个人项目或您的个人网站。在某些时候,在生产网站上进行修改变得太危险了。一行放错位置的 PHP 语法可能会导致整个网站崩溃。
如果您正在处理客户网站之类的东西,则需要升级您的工作流程。
现代的边做边学
构建网站的现代、健康、标准方法是
- 在 *本地* 操作。
- 使用版本控制(Git),其中新工作在
master
分支的分支中完成。 - 当代码推送到
master
分支时(例如,您的开发分支合并到其中),就会将代码部署到生产网站。
我最近制作了一个关于 整个工作流程 的视频,展示了我今天是如何操作的。我的工具集是
- 使用 Local by Flywheel 在本地工作。
- 我的网络托管也是 Flywheel,但这并不是必需的。它可以是任何提供 SFTP 访问并运行 WordPress 所需内容的东西:Apache、PHP 和 MySQL。声明:Flywheel 是此处的赞助商,因为我喜欢他们及其服务:)。
- 代码托管在 GitHub 上的一个私有存储库中。
- 通过 Buddy 将代码部署到 Flywheel 托管。Buddy 监视对
master
分支的推送,并将文件通过 SFTP 移动到生产站点。

现在您有了 *本地* 设置,您可以尽情发挥了。做任何你想做的事情。您无法破坏生产网站上的任何内容,因此您可以更自由地进行实验性更改,并查看会发生什么。
在本地工作时,您可能会使用代码编辑器编辑文件。我想说,如今最流行的选择是免费的 VS Code,但也包括 Atom 和 Sublime,以及更高级的编辑器,如 PhpStorm。
将代码推送到 Git 存储库后,文件修改的自由度尤其明显。完成此操作后,您可以自由地将文件 *恢复* 到上次推送的状态。

我使用 Git 软件 Tower,它允许我查看自上次提交代码以来哪些文件发生了更改。如果我犯了错误、造成了问题或做了一些我不喜欢的事情——即使我不记得自己到底更改了什么——我可以将这些更改 *丢弃* 回到它们的上一个状态。这是一定程度的自由。
当我 *提交* 代码时,无论是提交到 master 还是通过将分支合并到 master
,Buddy 都会启动并将更改部署到生产站点。

但是,从哪里开始呢?
我们这里讨论的是 WordPress 主题开发,所以您需要从一个主题开始。主题实际上是 WordPress 安装中的一系列文件文件夹。
root
- /wp-content/
- /themes/
- /theme-name/
WordPress 自带了一些主题。在我写这篇文章的时候,Twenty Twenty 主题与 WordPress 一起提供,它非常不错!您可以绝对从修改它开始。
主题倾向于对它们如何组织自己以及执行操作有一些看法,Twenty Twenty 也不例外。我想说,也许是有争议的,只要代码有效并且以“WordPress”的方式执行操作,就没有 *一种正确的方法* 来组织您的主题。这只是您在制作主题时需要掌握的一种感觉。
起始主题
在我的那个时代,起始主题是开始从头开始构建主题的一种非常流行的方法。我不确定现在是否仍然如此,但主要思想是一个包含您需要的所有基本主题模板(单个博客文章页面、主页、404 页面、搜索结果页面等)的主题,但标记非常少,而且没有任何样式。这样,您就拥有了一个空白画布,可以根据自己的喜好构建所有 HTML、CSS 和 JavaScript。有点像您使用这些核心技术从头开始构建任何其他网站,只是其中包含一些 PHP 代码来输出内容。
有一个名为 Starkers 的主题很受欢迎,但现在已经停止更新了。我自己也制作了一个名为 BLANK 的主题,但很久没有碰过了。在四处查看时,我发现了一些具有相同精神的新主题。以下是我发现的三个最好的主题
- HTML5 Blank
- BlankSlate
- _s (“Underscores”)
我个人无法保证这些资源的绝对完美,但它们都更新过一段时间了,在我看来都是不错的起点。如果我从零开始一个项目,我会尝试一下这些资源。我可能会下载其中一个,然后根据自己的喜好进行调整,并将其保存为我自己的启动模板,以备将来再次使用。
值得一提的是,很多网页开发工作**并非**从零开始,而是基于现有的项目进行开发。在这种情况下,流程仍然需要设置本地环境;只是你并非从零开始,而是使用现有的主题。我建议复制主题并更改名称,这样即使你部署了修改后的主题,也不会影响线上主题。其他人可能会建议使用启动模板作为“父”主题,然后分支出一个“子”主题。
为了使你的本地开发环境与线上网站完全同步,我认为最好的工具是WP DB Migrate Pro,它可以将线上数据库和所有媒体文件同步到你的本地站点(付费产品和付费插件,物超所值)。
更高级的启动模板
与其从零开始,不如使用一些带有合理默认设置和现代构建流程的主题作为起点。这样做的好处是,虽然完全可以使用原始的 HTML、CSS 和 JavaScript 来构建网站,但这样做缺乏足够的现代便利性,使用起来不够便捷。
以下是一些例子。
- Morten Rand-Hendriksen 拥有一个名为 WP Rig 的项目,其中集成了各种开发工具。一个基于 Gulp 的构建流程会启动一个 BrowserSync 服务器以实现自动更新。JavaScript 代码使用 Babel 进行处理。CSS 代码使用 PostCSS 进行处理,并且代码会进行 lint 检查。他使用它教授 WordPress。
- Roots 制作了一个名为 Sage 的主题,它包含一个模板引擎、你选择的 CSS 框架以及高级构建流程功能。
- Ignition 具有构建流程和各种辅助工具。
- Timber 带有一个模板引擎和许多代码辅助工具。
我认为所有这些都非常酷,但也可能不适合刚入门的新手开发者。
书籍
这很难说,因为 WordPress 书籍实在太多了。在 Google 上快速搜索了一下,我发现一个网站以 9.99 美元的价格捆绑销售了 15 本 WordPress 书籍。你甚至都不知道从哪里开始。以如此低廉的价格,它们的质量能有多好?我不知道。
我和 Jeff Starr 很久以前合写了一本书,名为Digging Into WordPress。这么多年过去了,Jeff 仍然在更新这本书,所以我认为这是一个不错的选择!Jeff 还写了其他一些书籍,例如 The Tao of WordPress 和 WordPress Themes In Depth。
很多其他专门关于 WordPress 主题开发的书籍都比较旧了,大多是 2008 年到 2015 年之间的作品。当然,这些书籍中仍然有一些值得学习的内容,特别是考虑到 WordPress 的变化并不算特别快,但即便如此,我还是更倾向于阅读出版时间不超过五年的书籍。对于像 WordPress 用户和开发者这样庞大的目标群体来说,这似乎是一个巨大的机会。或者,如果已经有我找不到的优秀资源,请在评论区告诉我。
也许学习方式正在转向线上,所以人们写书的频率降低了……
线上学习课程
我们的官方学习合作伙伴 Frontend Masters 有一门关于 WordPress 的课程,重点关注JavaScript 和 WordPress,所以这可能不太适合学习主题开发的基础知识。尽管如此,它仍然非常有趣。
以下是我在查找过程中发现的其他一些不错的课程:
- SuperHi:WordPress
- Chris Dixon:WordPress 5 主题开发学院(使用 Bootstrap v4)
- WPSHOUT:基础课程
- WPCasts(YouTube 上的免费课程)
- Know The Code,该课程使用特定的主题框架进行教学。
- Udemy:Zac Gordon 的完整 WordPress 主题和插件开发课程
Zac 的课程看起来是最新的,也可能是那里最好的选择。
主题开发的另一种思路
使用 WordPress 构建网站的一种方法是完全不使用 WordPress 主题!相反,你可以使用 WordPress API 从 WordPress 中提取数据,并根据自己的喜好构建网站。
- WordPress REST API(内置!)可以用来做类似这样的事情。
- Gatsby 和 WordPress
- 使用 wp-graphql 代替 REST 使用 GraphQL。
这种将 CMS 和前端构建解耦的想法非常巧妙。它通常被称为使用“无头”CMS。但这并不适合所有人。(一个主要原因是,从某种程度上来说,它会增加你的技术债务)。但它可以使 CMS 和前端都能够独立发展。
你链接的启动模板“Underscores”对我来说是最好的老师。对于已经掌握 HTML/CSS 并准备尝试一些 PHP 的开发者来说,非常棒。
我认为现在是 WordPress 发展的一个有趣且坦率地说有时令人沮丧的过渡时期,因为 Gutenberg 被设想为 WordPress 中创建内容的未来/方向。Gutenberg 计划彻底重新思考主题的制作方式(放弃菜单自定义器、小部件、短代码,而是使用块;如何制作页面模板)。
为 Gutenberg 特别创建主题元素(小部件、菜单、页面模板)的最佳实践和方向也尚未得到解答,例如https://github.com/WordPress/gutenberg/issues/18291和https://github.com/WordPress/gutenberg/issues/19254。
这篇文章强调了在 Gutenberg 中构建主题时存在更多的问题而不是答案。
https://wptavern.com/key-takeaways-from-the-first-future-of-themes-meeting
作为一个略有经验的人,我有点沮丧,因为 Gutenberg 的文档并不完善,我怀疑我是否构建得正确以及未来的发展方向是什么,尤其是因为 Gutenberg 的功能变化很快,所以 9 到 12 个月前的文档和教程不再正确或按预期工作。
如果你有兴趣并愿意投入时间/金钱来设定 WordPress 的方向:现在是一个绝佳的机会。
你可以使用现有的基础设施来创建主题的菜单和小部件,它们可以共存并与 Gutenberg 一起工作,但我不知道这种情况能持续多久;并且你将不得不做一些重复的工作,因为块的样式(css)并非在你的主题中完成,而是在块本身中完成。
去年这个时候,我也有同样的感觉,所以我花了 2019 年的大部分时间在团队的帮助下,基于 _s 创建了一个新的启动模板,其中集成了 Gutenberg。现在我们有一个启动模板,以及两个基于它构建的完整主题,我们免费提供,希望更多人能够使用/编辑/使用 Gutenberg 进行代码编写。
我们最终发布了自己的 Gutenberg 块插件,名为 C9 Blocks,它在 WordPress.org 上免费提供,并支持 2020、2019 主题以及我们的启动模板。
我希望看到更多关于人们如何构建 Gutenberg 网站的内容——本文中提到的许多内容都非常旧,并且没有涉及我们开发 WordPress 网站的“新”方式。我无法想象获取 Underscores 或 Roots 并尝试在此阶段构建一个对 Gutenberg 友好的主题。这就像在一个除了其他 Web 开发人员之外,没有人愿意使用的系统上工作,或者在需要大量自定义字段和功能的网站上工作。
如果使用 Gutenberg 开发了更多视觉导向的主题,WordPress 会变得更好,因为最终用户在这些编辑环境中会更加舒适——在我看来,这是 Squarespace 如此成功的最大原因。
我有一个类似的设置,使用 Local(由 Flywheel 提供)。它是目前最好的免费 WordPress 本地开发方式。
虽然我不使用 buddy,但我自己编写了一些 bash 脚本(老实说有好几个),它们允许我通过 sftp 将当前更改部署到服务器。
read -p "开始部署到线上环境?(y/n)" choice
case "$choice" in
y|Y ) rsync -avH -v --exclude=".*" --exclude="*.sh" ./ -e ssh user@server:/htdocs/wp-content/themes/child-theme;;
n|N ) echo "部署已取消";;
* ) echo "无效选择";;
esac
–exclude 指令告诉脚本排除所有隐藏文件和 bash 脚本上传。可以把它想象成 .gitignore :)
我有一些这样的脚本,名为 deploy-staging.sh、deploy-live.sh 等,并与一个名为““VsCode Action Buttons” (链接)”的 VSCode 插件结合使用。这个插件允许我在 VSCode 中创建自定义按钮,将当前插件/主题部署到各种不同的服务器。
在本地使用 git 使得测试新功能和在出现问题时回退到旧版本变得非常容易!