关于JSON文件和区块主题的WordPress主题作者调查问卷

WordPress 5.8引入了一个主题选择系统,用于配置区块设置、样式、模板等。这是通过一个新theme.json文件完成的,作者可以将其放在他们主题文件夹的根目录下。FSE Outreach Program的负责人Anne McCarthy在今天早些时候宣布了一项调查,以获取开发人员对此功能的反馈。

“由于这种新机制是面向WordPress未来的综合样式系统迈出的早期一步,因此重要的是要听取目前正在使用的每个人的意见,theme.json以了解更多有关人们如何使用该工具以及将哪些内容包含在Core中可能有意义的信息向前,”她在公告中写道。

该调查对所有使用过的主题作者开放theme.json,让他们有机会提供一些早期反馈并帮助引导船向前发展。

因为我在过去几个月中广泛使用该系统,所以我有一些话要说。另外,我只是喜欢参加与WordPress相关的调查。我还认为这是一个机会,可以从发展的角度分享我对theme.json.

以下是我对调查问题的回答——好吧,整理过的版本。

注意: 这是一篇以开发人员为中心的文章,可能不会普遍吸引我们所有的读者。我试图用用户友好的术语来解释一些事情,但可能需要一些主题开发的先决知识。

经验

调查的第一个问题非常简单。它询问您在构建区块主题或使用theme.json. 它提供了四个选项(和一个“其他”选项):

  • 我已经构建并启动了区块主题。
  • 我已经尝试过构建区块主题。
  • 我已经探索了使用theme.json经典主题。
  • 我使用了一个区块主题,但我还没有构建一个。

我选择第一个选项是因为我已经为家人和朋友构建了两个区块主题。这些是我已经免费维护的简单个人网站——老实说,我需要开始收费。我也在研究一个我希望公开发布的主题。

它是如何开始的以及它是如何进行的

第二个问题询问如何开始使用区块主题和theme.json. 选择是分叉现有主题、使用Empty Theme或从头开始。

同样,这是我在每个方向上都进行过实验的事情之一,但我不记得确切的起点。我的大部分工作都来自于对我上一次在2019年工作的主题进行分叉。

我计划在某个时候将其作为新主题免费发布。我主要在等待以下内容:

  • 导航区块开发落户
  • 将Post Author区块拆分为更小的区块
  • 一组健壮的评论相关区块
  • 发布特色图片区块以提供尺寸选项

如果这些项目得到解决,我想我今天可以实际发布我的主题的使用自担风险测试版。

模板和模板部件

该调查询问主题者总是在基于区块的主题中包含哪些模板和模板部件。有一个自由格式的评论栏——踏上肥皂盒……

我现在对区块模板有爱/恨的关系。HTML模板的静态特性让我想起了主题开发不那么复杂的简单时代。然而,这在动态系统中也存在问题。

我不记得上次我使用多个顶级模板构建基于PHP的传统主题是什么时候:index.php. 动态部分一直是事物的核心,它们是模板部分。使用 PHP,很容易设置一些变量或使用函数调用来上下文加载访问者当前在站点上查看的任何页面所需的模板部分。

区块模板系统不是这样工作的。它本质上迫使开发人员打破不要重复自己 (DRY) 原则。

例如,如果设计师想要为页面和文章显示不同的标题模板部分,他们只需要在传统主题中创建一个header-page.phpheader-post.php模板。但是,由于区块模板系统不同,他们现在必须创建两个顶级模板single.html(post) 和page.html来完成相同的事情。

这是一件“坏事”,因为主题作者必须在每个顶级模板中复制所有其他代码。无法根据上下文加载不同的模板部件。

回答这个问题:出于需要,我使用了几乎所有可能的顶级模板。

我还回答了问题的第二部分并列出了我最常用的模板部分(按层次结构细分):

  • 标题
  • 内容– 循环– 侧边栏
  • 页脚

content-*.htmlloop-*.html模板部分是那些拥有最多的变化。

定义颜色

调查的下一部分询问主题作者如何在theme.json. 信不信由你,命名颜色可能是多年来主题世界中最具争议的话题。唯一公认的两件事是“背景”和“前景”颜色。

Morten Rand-Hendriksen在2018年为标准化主题颜色命名方案创建了一个讨论工单。这不是第一次讨论,也不是最后一次。它旨在解决的问题是系统中颜色的slug,这就是主题如何定义它们的调色板。一旦用户使用预设颜色,slug就会被硬编码到他们的内容中。切换到具有不同slug的另一个主题,旧颜色会消失,并且不会自动更改为新主题的颜色。

我使用的语义名称与Tailwind CSS框架的着色系统非常相似。例如red-medium,我会使用primary-500(语义)而不是(描述性)。语义方法将允许主题作者定义一组颜色,每次用户切换主题时都会更新这些颜色。

当然,还有其他的学派,甚至每个喜欢语义命名的人也不会在同一个系统上达成一致。我在最近的 GitHub 票证中更详细地描述了我的方法,并为可能想尝试的其他人提供了theme.jsonGist

其他主题JSON设置

除了颜色和排版之外,该调查还询问了作者使用的其他设置主题。这是我通常使用所有内容的另一种情况——如果有一个选项,我会定义它。

WordPress当前没有预设的一个用例是全局间距。大多数主题作者对大多数垂直边距(区块和元素之间的空白)使用单个值。它也经常用于默认的垂直和水平填充。

我不确定是否需要预设,因为我不知道 WordPress 将如何使用它。这是其他人所要求的,并且几乎无处不在。围绕它定义一个完整的系统可能会让人头疼,但我仍然希望看到一些关于至少实现标准全局间距预设的讨论。

每区块设置和样式

这个调查部分是一个是/否问题,只是询问主题作者是否在他们的theme.json文件中包含每个区块的设置或样式。当然,我稍后在可选评论部分留下了一些额外的评论。

在设置方面,我对系统感到满意,它允许用户定义全局或基于每个区块启用哪些功能。但是,我并不热衷于通过theme.json.

用JSON编写CSS,本质上我们正在谈论的内容,在很多层面上都感觉不对。目前,它仅限于几种可配置的样式,因此无论如何都需要深入研究实际的CSS文件。这是有问题的,因为主题的一半CSS代码被划分为theme.json一个单独的CSS文件。从开发的角度来看,它使代码库更难维护。

最初,我从theme.json. 但是,我已将样式移回CSS文件。感觉更自然,而且我拥有我习惯的所有工具的额外好处。现在,我无法想象我会搬回去的场景。

除了节省几个字节的代码之外,我还没有看到通过JSON为大多数事物添加样式有什么好处。也许这会在未来改变,我会成为一个皈依者。现在,我主要坚持使用CSS。

其他反馈:PHP层

我以前说过,但它值得重复。对于这个theme.json配置系统,我们需要一个PHP层。目前有一个解决这个问题的公开讨论工单

这种系统有两个主要好处。对于传统的主题开发人员来说,拥有用于拼凑配置的PHP API会更自然。我把它看作是一个橄榄枝,核心/古腾堡开发人员认识到许多主题作者将通过熟悉的编程语言更容易地进入FSE功能,这是一种诚意的表现。

第二个优势是,如果有一种简单的方法可以连接到主题JSON系统并覆盖内容,那么有无数的插件想法可以扩展全局样式、站点编辑等。一个简单的过滤器钩子可以让这一切变得轻松。

评论留言