更新主题

一旦您的主题在 WordPress.org 主题目录上线,您可能需要不时更新它。这可能是为了修复漏洞、添加新功能或进行常规改进。

WordPress.org 上更新主题有两种方法:上传新的 zip 文件或使用 Subversion (SVN)。

让我们来看看这两种方法。

上传新的 zip 文件

更新主题最直接的方法是将新的 zip 文件上传到 WordPress.org 主题目录。

一旦您对主题文件进行了任何更改,就需要更新 style.css 文件中的版本号。

/*
 * Theme Name: Twenty Twenty-Four
 * Version: 1.2
 */

这很重要,因为它会告诉 WordPress 有新版本的主题可用。

然后,使用您首次提交时所用的方法,为您的主题目录创建一个新的 zip 文件。

最后,浏览到 https://wordpress.org/themes/upload/,并按照相同的流程上传 zip 文件。

使用 Subversion (SVN)

另一种替代 zip 上传的方法是使用 Subversion(也称为 SVN)来更新您的主题。

Subversion 是一种类似于 Git 的版本控制系统,允许您管理代码的更改。

当 WordPress 插件仓库首次创建时,使用 Subversion 允许开发者管理插件和主题的更新。

这主要是因为当时 Git 和 GitHub 还不存在,而 Subversion 是开源开发者使用的默认版本控制软件。

因此,在几年后 WordPress 主题目录推出时,使用相同的系统是合理的。

要使用 Subversion 更新主题,您需要在本地机器上安装 Subversion,然后使用它将更改提交到 WordPress.org 主题目录。

使用 Subversion 的好处之一是,它允许您跟踪主题随时间的变化,并在需要时轻松回滚到以前的版本。

您可以在主题目录中您的主题页面上,在“浏览代码”下找到 Subversion 仓库 URL。

例如,Twenty Twenty-Four 主题的 URL 是:

https://themes.svn.wordpress.org/twentytwentyfour/

macOS 和 Linux

对于 macOS 用户,您可以使用 Homebrew 安装 Subversion。

如果您还没有安装 Homebrew,需要先安装它。

安装 Homebrew 后,在终端中运行以下命令来安装 Subversion:

brew install subversion

Linux 用户可以使用包管理器安装 Subversion。例如,在 Ubuntu 上,您可以运行:

sudo apt install subversion

安装 Subversion 后,您可以使用它从 WordPress.org 检出主题仓库。

在终端中,导航到您要存储主题文件的目录,并运行 svn co(或 checkout)命令:

svn co https://themes.svn.wordpress.org/twentytwentyfour/

这会将主题文件从 Subversion 仓库下载到您的本地机器。

下一步是创建最新版本主题的副本,以生成更新版本。

首先,导航到您的主题目录

cd twentytwentyfour

然后,使用 svn cp(或 copy)命令创建最新版本主题的副本:

svn cp 1.1 1.2

现在,您可以在新目录中对主题文件进行更改。

确保更新 style.css 文件中的版本号以匹配新版本,并更新 readme.txt 中的更新日志。

准备好提交新版本的主题后,您可以运行 svn commit 命令:

svn commit -m "Fix typo on readme.txt"

在提交过程中,系统会要求您输入用户名和密码。这与您登录 WordPress.org 主题目录时使用的用户名和密码相同。

Windows

对于 Windows 用户,您可以下载并安装 TortoiseSVN,它提供了管理 Subversion 仓库的图形界面。

TortoiseSVN 与 Windows 资源管理器集成,因此您可以右键单击文件夹内部,选择 TortoiseSVN -> 检出 选项,将主题文件下载到本地机器。

建议为您的主题文件创建一个专门的文件夹,并将仓库检出到该文件夹中。

它会要求您提供 Subversion 仓库的 URL,您可以在主题目录中的主题页面上找到它。

检出完成后,您可以通过创建新文件夹并复制文件,或复制粘贴现有文件夹并重命名,来创建主题的新版本。

现在,您可以在新目录中对主题文件进行更改。

确保更新 style.css 文件中的版本号以匹配新版本,并更新 readme.txt 中的更新日志。

当你准备好提交主题的新版本时,可以在主文件夹内右键点击,然后选择 TortoiseSVN -> 提交 选项。

这会打开一个对话框,你可以在其中输入提交信息,选择所有要提交的文件,然后点击“确定”来提交更改。

与 macOS 和 Linux 系统一样,在提交过程中系统会要求你输入用户名和密码。这与登录 WordPress.org 主题目录时使用的用户名和密码相同。

成功提交之后

成功提交后,你会收到一封来自 WordPress.org 的电子邮件,确认你的主题新版本已上传。

在 WordPress.org 目录中显示可能需要一些时间,但更新后的版本通常会在几小时内可用。

测试你的主题

在向公众发布主题之前,您应该对其进行全面测试,确保其按预期工作。

我们来看看发布主题前需要做的一些事情,包括:

  • 在本地开发环境中测试主题。
  • 使用主题测试数据确保主题能处理各种内容。
  • 用于调试和测试的有用插件。
  • 可访问性和性能测试工具。

在本地开发环境中测试主题

学习 WordPress 开发者路径中的所有课程都推荐使用本地开发环境。

不过,也可以使用在线服务器开发块主题,尤其是在使用 Create Block Theme 时。

因此,在本地开发环境中测试主题也是一个好主意。

这样做的好处之一是,您可以启用 WordPress 调试选项,查看主题是否产生任何错误或警告。

如果您还没有本地开发环境,请查看“本地开发环境”课程以了解一些选项。

使用主题测试数据

测试主题的一部分包括确保它能处理各种内容。默认情况下,新的 WordPress 安装只有一个示例页面、文章和评论。

您无需手动创建不同类型的内容,而是可以下载并安装 WordPress 项目的主题测试数据。

这些测试数据包含一组文章、页面和其他内容,可用于测试您的主题。

要安装主题单元测试数据,请按照以下步骤操作:

  1. 从 GitHub 仓库下载主题单元测试数据文件,点击下载原始文件按钮,并将文件保存到计算机硬盘。
  2. 在 WordPress 管理后台中,转到工具 > 导入
  3. WordPress 部分下,点击立即安装。这将安装 WordPress XML 导入器。
  4. 安装完成后,点击运行导入器链接。
  5. 点击选择文件按钮,选择之前下载的主题单元测试数据文件。
  6. 点击上传文件并导入按钮。
  7. 将内容分配给现有用户,或创建一个新用户来分配,并确保勾选下载并导入文件附件复选框。然后点击提交按钮。

导入完成后,您应该会在网站上看到各种内容,包括文章、页面和其他内容类型。

然后,您可以使用这些内容测试主题,确保其正确显示。

用于调试和测试的有用插件

有几个社区插件可以在主题开发过程中帮助您测试和调试主题。

在主题开发过程中,有几个插件可以帮助您发现和修复问题,包括:

  • Query Monitor
  • Debug Bar
  • Log Deprecated Notices

当您准备分发主题时,Theme Check 插件会根据 WordPress 主题审查指南评估您的主题代码。

遵循这些指南是将主题提交到 WordPress 主题目录的要求。

即使您不打算通过主题目录分发主题,这仍然是测试主题结构和代码的良好基线。

跨浏览器测试

为了有效进行块主题的跨浏览器兼容性测试,您需要在所有主流浏览器上测试主题,包括 Firefox、Chrome、Safari 和 Edge。

您还可以使用第三方工具,如 BrowserStack 或 BitBar,在不同浏览器和设备上测试主题。

此外,大多数现代浏览器都提供开发者工具,允许您检查渲染页面的所有内容,包括 JavaScript 错误、网络使用情况和主题性能。

使用浏览器开发者工具还可以启用响应式设计模式,让您在不同设备和屏幕尺寸上测试主题。

可访问性和性能测试工具

确保主题的可访问性是负责任的主题开发的关键方面。

您应努力确保主题符合 WordPress 可访问性指南。这包括键盘导航、屏幕阅读器兼容性以及正确使用 ARIA 角色等方面。

如果您还没有了解过,请查看“主题可访问性”模块,了解更多关于使主题可访问的重要性、常见可访问性问题以及如何避免它们的信息。

您还应该测试主题,确保它没有加载不必要的资源,并且针对性能进行了优化。

要测试这一点,你可以使用 Google Lighthouse 等工具,它可以通过 Chrome 开发者工具、命令行或作为 Node 模块运行。

你也可以将主题安装到真实网站上,并使用 PageSpeed Insights 或 GTmetrix 等工具来测试主题的性能。请确保不仅测试首页,还要测试页面和文章等其他模板。

延伸阅读

有关测试主题的更多信息,包括本课程中提到的所有技巧和工具,请查阅主题开发者手册中“高级主题”下的“测试”页面。

将主题提交到WordPress.org

当你确认你的主题已包含所有必需文件、符合主题审查指南,并且已全面测试后,就可以准备将主题提交到 WordPress.org 主题目录了。

接下来,我们来看看这个过程是怎样的。

打包你的主题

上传主题以供审查的过程,要求你上传整个本地主题目录的 zip 压缩文件。

有多种方法可以实现这一点,从使用终端到使用操作系统的文件管理器都可以。

例如,如果你使用的是基于 Unix 的操作系统,可以在终端中使用 zip 命令来创建主题的 zip 文件:

zip -vr new-theme.zip new-theme/

这个 zip 文件应包含主题目录内的所有主题文件。

请确保不要包含任何不属于主题的文件,例如版本控制文件、包依赖文件,或任何主题运行所不需要的其他文件。

关于主题名称的说明

需要注意的是,主题在 WordPress.org 主题目录上注册的名称(有时也称为主题别名)取决于你在本地电脑上创建主题时文件夹的名称。

例如,对于“Twenty Twenty-Four”主题,文件夹名称是 twentytwentyfour。当你创建 zip 文件时,包含所有主题文件的主题文件夹会被打包到 zip 文件中。

当新主题提交时,主题名称会自动从该文件夹名称生成。这个名称随后会在主题目录中各处使用,从主题 URL 到 WordPress.org 上主题代码仓库的位置。

因此,选择一个独特且能反映主题标题的主题名称是个好主意。

上传你的主题

一旦你准备好了 zip 压缩包,就可以将其上传到 WordPress.org 主题目录。

为此,请访问 https://wordpress.org/themes/upload/。

你需要使用你的 WordPress.org 账户登录。如果你还没有 WordPress.org 账户,可以点击创建账户链接并填写所需信息来创建一个。

登录后,你可以点击选择文件按钮,选择主题的 zip 压缩包来上传主题。

你还需要确认你拥有上传主题的权限,它符合主题审查指南,并且与 GPL 兼容。

勾选所有选项后,点击上传按钮即可将主题上传以供审查。

主题审查流程

主题上传后,会自动执行一系列操作。

主题文件会被解压,新主题会在 WordPress.org 主题目录中创建。这意味着主题会有一个基于主题名称的主题 URL,以及一个用于主题代码的 SVN 仓库,所有这些都托管在 WordPress.org 的基础设施上。该过程还会对主题进行一系列自动检查,与 Theme Check 插件中的检查相同。

然后,主题会被添加到审查队列中,由 WordPress 主题审查团队的成员进行审查。这个队列在名为 Trac 的软件中管理,Trac 是 WordPress 社区使用的错误跟踪系统。

会创建一个新的 Trac 工单,并将主题详情添加到工单中。然后,主题审查员会下载主题,并根据主题审查指南进行审查。

如果主题工单在分配后的前 48 小时内没有来自主题审查员的更新,你可以请求将主题放回新队列,并分配新的审查员。

主题审查员和主题作者之间的任何沟通都会在 Trac 工单的评论中进行,主题作者会收到需要解决的问题通知。

当工单更新时,Trac 会自动向主题作者发送电子邮件,因此密切关注你的电子邮件以获取任何更新非常重要。这将是你注册 WordPress.org 账户时使用的电子邮件。

如果主题工单在 7 天内没有来自主题作者的更新,可能会因不活跃而关闭。

一旦主题通过所有必需的检查,审查员会将主题标记为已批准。然后,主题会被添加到 Trac 中的最终审查队列,由关键审查员进行最终审查。

如果主题通过最终审查,它会被标记为上线,主题将出现在 WordPress.org 主题目录中。

延伸阅读

你可以在 WordPress 主题审查团队手册中阅读更多关于主题审查流程的内容。

准备主题提交

完成主题开发后,你需要将其准备好提交到 WordPress.org 主题仓库。

在本课中,你将学习如何准备主题提交,包括如何测试主题、检查并遵循主题审查指南,以及为主题准备文档。

测试你的主题

在将主题提交到 WordPress.org 主题目录之前,你应该彻底测试它,确保其按预期工作。

这包括测试是否存在任何错误或警告、如何处理不同类型的内容,以及在可访问性和性能方面的表现。

高级主题开发模块中的“测试你的主题”课程详细涵盖了所有这些方面,请务必复习该课程。

针对 WordPress 的下一个版本测试你的主题也很有帮助,以确保其保持兼容性。

为此,你可以安装 WordPress Beta Tester 插件,该插件允许你将网站切换到 WordPress 的最新测试版或候选发布版。

一旦你确信已彻底测试了主题,就可以进入下一步。

主题审查指南

WordPress 主题审查指南是一套要求,在将主题提交到 WordPress.org 主题目录时需要遵守。

这些指南涵盖了广泛的主题,包括:

  1. 许可与版权
  2. 隐私
  3. 可访问性
  4. 代码要求
  5. 功能与特性
  6. 插件
  7. 命名、拼写和商标
  8. 语言与国际化
  9. 文件要求
  10. 经典主题要求
  11. 块主题要求
  12. 主题设置页面和引导
  13. 升级销售、信用、链接和垃圾信息
  14. 主题作者和主题上传限制

你的下一步是审查主题审查指南中的每一项,并确保你的主题满足所有要求。

如果你已经使用“测试你的主题”课程中提到的工具彻底测试了主题,那么你应该已经解决了主题审查指南涵盖的许多问题。

不过,仍然建议你逐一检查所有项目,并在提交前确认每项都符合要求。

在提交过程中,如果主题根据这些指南包含 3 个或更多不同的问题,可能会被关闭并标记为未批准。

修复问题后可以重新提交主题,但这会延迟流程。

准备文档

准备主题提交的最后一步是创建文档,详细说明主题的功能、自定义选项以及任何独特方面。

主题需要提供最终用户文档,说明任何设计限制或特殊的安装/设置说明。

根据文档的详细程度,将决定你在何处添加这些信息。

虽然你可以将这些信息添加到主题的 readme.txt 文件中,但通常更容易的做法是在专门的主题主页上提供这些信息。

许多主题开发者会在其网站上创建一个页面,提供关于主题的详细信息,包括安装说明、自定义选项以及任何其他相关信息。

然后,他们会使用 style.css 文件中的主题 Theme URI 字段链接到该页面。

此链接将显示在 WordPress.org 主题目录中的主题页面以及 WordPress 管理后台中,用户可以点击它访问主题文档。

结论

一旦你测试了主题、对照主题审查指南进行了检查并准备了文档,你就可以将主题提交到 WordPress.org 主题目录了。

必需的主题文件

当你将主题提交到 WordPress.org 主题目录时,需要包含一组必需的主题文件。

让我们来看看这些文件是什么以及它们为何重要。

区块主题

在关于主题结构的课程中,你了解到一个有效的区块主题仅需要两个必需文件:style.cssindex.html 文件。

然而,当你将主题提交到 WordPress.org 主题目录时,还需要额外的文件。

你还需要包含一个 theme.json 文件和一个 readme.txt 文件。

此外,你还需要一个截图文件。

让我们更详细地了解这些文件。

theme.json

theme.json 文件用于定义主题的全局样式和设置。

通常,在主题开发过程中你会创建这个文件,除非你没有特定的全局样式或设置。

即使是“创建区块主题”功能也会为你生成一个 theme.json 文件,其中包含一些默认的全局样式和设置。

如果你没有 theme.json 文件,可以使用此模板在主题根目录中创建一个。

{
    "version": 2,
    "settings": {},
    "styles": {}
}

readme.txt

readme.txt 文件最初是插件必需的,现在插件和主题都使用它来提供更多相关信息。

对于主题而言,readme.txt 中的信息会显示在 WordPress.org 主题目录的主题页面上。

该文件应包含主题的相关信息,例如主题名称、描述、版本号、作者以及其他详细信息。

WordPress 的 readme 文件标准包含了你在 readme.txt 文件中可以使用的信息类型详情。

还有一个 readme 验证器,你可以用它来检查 readme.txt 文件的格式是否正确。

截图

截图文件用于在 WordPress.org 主题目录以及 WordPress 管理区域的主题目录页面中显示主题的预览。

该文件应为 PNG 或 JPG 格式的图片,尺寸不应超过 1200 x 900 像素。

如果你使用“创建区块主题”功能来创建主题,系统会自动生成一个默认的截图文件,但最好将其替换为展示你主题特色的自定义截图。

经典主题

如果你提交的是经典主题,所需的文件略有不同。

正如“经典主题简介”课程中所述,经典主题在 WordPress 网站中运行所需的唯一文件是 style.cssindex.php 文件。

然而,当将经典主题提交到 WordPress.org 主题目录时,你还需要包含一个 comments.php 文件。

在经典主题中,这个文件包含评论模板,用于在允许评论的地方显示。

与区块主题一样,你还需要包含 readme.txt 文件和截图文件。

延伸阅读

有关必需主题文件的更多信息,你可以参考 WordPress 主题开发者手册中“主题结构”章节的“必需文件”和“可选文件”部分。

WordPress.org 主题目录

当你开发完主题后,很可能会考虑如何发布它,以便 WordPress 用户能够安装和使用。

最流行的方法之一是将你的主题提交到 WordPress.org 主题目录。

让我们深入了解什么是 WordPress.org 主题目录,为什么你可能考虑在那里发布主题,并了解将主题提交到主题目录的流程。

什么是 WordPress.org 主题目录?

WordPress.org 主题目录是一个免费、采用 GPL 许可的主题仓库,这些主题已经过 WordPress 主题审查团队的审核和批准。

在 WordPress.org 主题目录中发布主题的好处之一是,你可以接触到大量 WordPress 用户。

用户可以从在线主题目录下载主题,或者直接从 WordPress 仪表盘的“主题”页面安装。

为什么要在 WordPress.org 主题目录中发布你的主题?

除了 WordPress 用户可以直接从他们的 WordPress 仪表盘搜索和安装你的主题之外,当你在 WordPress.org 主题目录中发布主题时,还可以使用一些额外功能,包括:

主题更新

你可以推送主题更新,安装了你主题的用户会在他们的 WordPress 仪表盘中收到更新通知。

支持论坛

主题目录内置了支持论坛,你可以在那里为有疑问或遇到问题的用户提供支持。

主题预览

主题目录支持主题的实时预览,用户可以在安装前看到主题的外观。

主题统计

你可以查看有多少用户正在积极使用你的主题,以及有多少人下载了你的主题。

主题评分和评论

用户可以对你的主题进行评分和评论,你可以利用这些反馈来添加功能、进行改进,并扩大用户群。

如何将你的主题提交到 WordPress.org 主题目录

要将主题提交到 WordPress.org 主题目录,你需要遵循一系列步骤。以下是该流程的简要概述:

第 1 步:检查必需的主题文件 – 确保你的主题包含提交所需的最低文件要求。

第 2 步:测试你的主题 – 使用 Theme Unit Test 数据、PHP_CodeSniffer 的 theme-sniffer 扩展以及 Theme Check 插件等工具来测试主题是否存在错误,并修复它们。

第 3 步:遵循主题审查指南 – 仔细阅读并理解主题审查指南,确保你的主题满足所有要求。

第 4 步:准备文档 – 创建详细说明主题功能、自定义选项以及任何独特方面的文档,这些内容可以包含在主题的 readme.txt 文件中,或通过主题下载页面提供。

第 5 步:提交和审查流程 – 将你的主题提交到 WordPress.org 主题目录,然后等待主题审查团队审查你的主题。这个过程可能需要几周时间,具体取决于提交主题的数量。

你将在本模块的后续课程中更详细地了解这些步骤。

总结

WordPress.org 主题目录是发布主题的最佳场所之一。它可以让你接触到大量 WordPress 用户,并提供有用的功能来支持和改进你的主题。

插件API钩子

WordPress 提供了许多钩子,允许插件“接入”WordPress 的功能。

你的主题应支持这些钩子,以便插件开发者能够扩展你的主题。

在本课中,你将学习如何通过实现特定的模板标签,让插件能够接入你的主题。

关于块主题的说明

如果你正在开发块主题,则无需担心实现这些模板标签。

实现本课所述功能的块已经支持相关的钩子。

只有在开发经典主题或核心块之外的自定义功能时,才需要使用这些模板标签。

模板标签

大多数钩子由WordPress内部自动执行,因此你的主题无需特殊标签即可使其工作。

然而,少数钩子需要在特定的主题模板中得到支持。

这些钩子由特定的模板标签触发:

wp_head() 触发 wp_head 动作,插件利用它向主题的 <head> 部分添加代码。

此标签应始终位于主题 header.php 模板文件中 <head> 元素的末尾。

wp_body_open() 触发 wp_body_open 动作,插件利用它向主题的 <body> 元素添加代码。

此标签应位于主题 header.php 模板文件中 <body> 元素的开头。

wp_footer() 触发 wp_footer 动作,插件利用它向主题的页脚添加代码。

此标签应位于主题的 footer.php 文件中,紧接在闭合的 </body> 标签之前。

wp_meta() 触发 wp_meta 动作。此动作可能有多种用途,具体取决于你的使用方式,但其中一个用途可能是允许主题切换。

此标签通常位于主题菜单或侧边栏的 <li>Meta</li> 部分。

comment_form() 用于在文章末尾显示评论表单。

此标签应位于 comments.php 模板文件中,直接放在文件闭合的 </div> 标签之前。

构建流程

在开发 WordPress 主题时,考虑是否需要构建流程来帮助你管理主题资源并优化性能会很有用。

在本课中,你将学习更多关于构建流程的知识、为何要使用它们,以及如何使用 @wordpress/scripts 包来设置一个基本的构建流程。

什么是构建流程?

构建流程是一种将源代码文件转换为计算机可读取的最终构建/生产版本的方法。

特别是,主题通常会将源代码压缩或转换为 CSS 或 JavaScript,以便浏览器能够读取。

为什么要使用构建流程?

根据你在主题中使用的技术,你可能需要一个构建流程来帮助你管理主题资源并优化性能。

例如,如果你选择使用 Sass 来编写样式,你将需要一个构建流程来将你的 Sass 文件编译成浏览器可读取的 CSS 文件。

如果你选择使用更现代的语法编写 JavaScript,你将需要一个构建流程来将你的 JavaScript 文件转译成所有浏览器都能执行的格式。

即使你不使用这些选项,构建流程对于优化主题资源仍然很有用,例如压缩 CSS 和 JavaScript 文件以及优化图片。

在创建 WordPress 主题时,你可能会发现自己需要一个构建流程来处理更复杂的项目。有很多系统可供选择,你可以使用任何你喜欢的。

WordPress 也提供了 @wordpress/scripts 包,你可以放心它会持续更新,并且应该能满足你大部分的需求。

前置要求

大多数 WordPress 主题开发不需要任何额外的软件。你只需要一个代码编辑器、一个本地开发环境和一个 WordPress 安装。

但要使用构建流程,还有一些其他要求:

  • 你需要在本地机器上安装 Node.js 和 npm,这也是构建 WordPress 区块的要求。
  • 建议对 webpack 有基本的了解。
  • 对 @wordpress/scripts 包有一定熟悉度。

这些工具比通常构建主题所需的工具更高级,但如果你想使用标准的 WordPress 构建流程,它们是必需的。

如果你已经完成了初级开发者学习路径中的区块开发入门模块,你应该已经具备了所有需要的知识。

设置文件和文件夹

@wordpress/scripts 包最初是为区块开发创建的。随着时间的推移,它已经发展到也能与主题一起使用。

默认情况下,它期望开发文件位于 /src 文件夹中,并将构建文件输出到 /build 文件夹。

然而,大多数主题作者会使用自定义系统来处理资源。

假设你的主题有以下结构:

your-theme/
├── resources/
│   ├── js/
│   └── scss/
├── public/
│   ├── js/
│   └── css/
├── style.css
└── functions.php

你的开发 JavaScript 和 Sass 文件分别位于 resources/jsresources/scss 文件夹中。当构建流程运行时,你希望它们被输出到 public/jspublic/css 文件夹。

设置 package.json 文件

第一步,如果你还没有做的话,是初始化 npm 项目。这将在你的主题根目录中创建一个 package.json 文件。

为此,打开你的终端,导航到主题根目录,并运行以下命令:

npm init

系统会提示你输入一些关于项目的信息。你可以按回车接受默认值,或根据自己的喜好更改这些值。

完成设置后,你的主题根目录中会有一个 package.json 文件。

{
  "name": "your-theme",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

接下来,你需要将 @wordpress/scripts 包作为开发依赖项安装。

为此,在终端中,在你的主题根目录下运行以下命令:

npm install @wordpress/scripts --save-dev

完成后,你会看到 package.json 文件已更新,包含了新的依赖项。

{
  "name": "your-theme",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@wordpress/scripts": "^27.9.0"
  }
}

最后但同样重要的是,更新 package.json 文件中的 scripts 部分,包含以下内容:

{
  "scripts": {
    "start": "wp-scripts start --webpack-src-dir=resources --output-path=public",
    "build": "wp-scripts build --webpack-src-dir=resources --output-path=public"
  }
}

这会创建两个 npm 脚本命令,startbuild,它们将使用适合你主题的正确配置来运行 @wordpress/scripts 包。

在这种情况下,它会在 resources 文件夹中查找文件,并将它们输出到 public 文件夹。

如果你有不同的文件夹结构,可以调整 --webpack-src-dir--output-path 参数以匹配你的设置。

配置 webpack

@wordpress/scripts 包是基于 webpack 构建的。如果你在构建区块,所有配置都已经为你准备好了。

但是,由于你正在构建主题,你需要用自己的配置覆盖 @wordpress/scripts 包的一些默认配置。

为此,请在主题根目录中创建一个自定义的 webpack.config.js 文件。

// WordPress webpack config.
const defaultConfig = require( '@wordpress/scripts/config/webpack.config' );

// Plugins.
const RemoveEmptyScriptsPlugin = require( 'webpack-remove-empty-scripts' );

// Utilities.
const path = require( 'path' );

// Add any new entry points by extending the webpack config.
module.exports = {
    ...defaultConfig,
    ...{
        entry: {
            'js/editor':  path.resolve( process.cwd(), 'resources/js',   'editor.js'   ),
            'css/screen': path.resolve( process.cwd(), 'resources/scss', 'screen.scss' ),
            'css/editor': path.resolve( process.cwd(), 'resources/scss', 'editor.scss' ),
        },
        plugins: [
            // Include WP's plugin config.
            ...defaultConfig.plugins,

            // Removes the empty `.js` files generated by webpack but
            // sets it after WP has generated its `*.asset.php` file.
            new RemoveEmptyScriptsPlugin( {
                stage: RemoveEmptyScriptsPlugin.STAGE_AFTER_PROCESS_PLUGINS
            } )
        ]
    }
};

自定义 webpack 配置可以在 WordPress 开发者手册高级主题部分的构建过程页面中的配置 webpack 章节找到。

这个配置文件为你的自定义 JavaScript 和 Sass 文件设置了入口点,并告诉 webpack 在哪里找到它们。

它还配置了 webpack-remove-empty-scripts,这样就不会有残留的 JavaScript 文件映射到你的 CSS。

运行构建过程

一切设置完成后,你现在可以运行构建过程了。

要启动开发服务器,请在终端中运行以下命令:

npm run start

这将启动开发服务器并监视你的文件变化。当你对 JavaScript 或 Sass 文件进行更改时,构建过程将自动重新编译它们。

要为生产环境构建主题,请在终端中运行以下命令:

npm run build

加载脚本和样式

在关于包含资源的课程中,你已经学会了如何在主题中加载脚本和样式。

当使用构建过程时,你需要加载编译后的文件,而不是源文件。

如果你打开 public/js 文件夹,你会看到构建过程创建了以下文件:

editor.js
editor.asset.php

资源文件返回一个 PHP 数组,其中包含一个依赖项数组和一个 editor.js 文件的版本号。

然后你可以使用这个数组在主题中加载脚本。

首先,使用相关的钩子并在 functions.php 文件中指定钩子回调函数

// Load editor scripts.
add_action( 'enqueue_block_editor_assets', 'themeslug_editor_assets' );

function themeslug_editor_assets() {

}

在钩子回调函数内部,包含资源文件

$script_asset = include get_theme_file_path( 'public/js/editor.asset.php'  );

最后,使用资源文件中的值加载脚本

    wp_enqueue_script(
        'themeslug-editor',
        get_theme_file_uri( 'public/js/editor.js' ),
        $script_asset['dependencies'],
        $script_asset['version'],
        true
    );

你的最终代码应该如下所示:

add_action( 'enqueue_block_editor_assets', 'themeslug_editor_assets' );
function themeslug_editor_assets() {
    $script_asset = include get_theme_file_path( 'public/js/editor.asset.php'  );
    wp_enqueue_script(
        'themeslug-editor',
        get_theme_file_uri( 'public/js/editor.js' ),
        $script_asset['dependencies'],
        $script_asset['version'],
        true
    );
}

对于任何你想要加载的样式表,过程是类似的。

进一步阅读

关于如何使用 @wordpress/scripts 包 设置构建过程的完整指南,你可以参考 WordPress 开发者手册高级主题部分的构建过程页面。

主题中的JavaScript

JavaScript 是一种编程语言,用于为网页添加交互功能。

主题开发者通常使用 JavaScript 来为他们的主题提供交互性、动画或其他增强功能。

虽然使用 JavaScript 可以让你的主题更具吸引力和互动性,但如果使用不当,也可能带来潜在问题。

在本课中,你将学习在 WordPress 主题中使用 JavaScript 的一些最佳实践。

你将了解如何使用第三方 JavaScript 库、编写 JavaScript 时应遵循的一些最佳实践、是否应该使用 jQuery,以及在哪里可以找到更多信息。

JavaScript 库

如果你需要在主题中使用任何第三方 JavaScript 库,请务必检查该库是否已通过 WordPress 安装提供。

WordPress 包含多个你可以使用的 JavaScript 库。这些库随 WordPress 一起提供,你可以在主题中使用它们。

新手主题开发者常犯的一个错误是将自己的库版本与主题捆绑在一起。

然而,这可能会与那些加载 WordPress 自带库版本的插件产生冲突。

你可以在 wp_enqueue_scripts 函数参考中找到 WordPress 包含和注册的默认脚本和 JavaScript 库的完整列表。

确保你的主题与你喜欢的、WordPress 自带的库版本兼容。

编写 JavaScript

JavaScript 在网络上越来越受欢迎,多年来这门语言已经改进,能够执行各种任务。这意味着对于更常见的任务,你可能根本不需要使用 JavaScript 库,只需编写纯 JavaScript 即可。

以下是编写 JavaScript 时需要考虑的一些事项:

  1. 尽量避免使用全局变量。

全局变量在整个代码中都是可用的,无论作用域如何。这意味着你可以从代码的任何位置访问和修改这些变量,无论是在函数内部还是外部。

// 避免这样做
var myGlobal = 'Hello';

function myFunction() {
    console.log(myGlobal);
}

为了避免使用全局变量,你可以使用多种替代方法,但最直接的方法是使用立即调用函数表达式(IIFE)。这允许你在局部作用域中定义变量,防止它们污染全局命名空间。

(function() {
    var myLocal = 'Hello';
    console.log(myLocal);
})();
  1. 保持你的 JavaScript 不引人注目

确保你的 JavaScript 不会干扰页面内容或产生不必要的错误。这意味着你的 JavaScript 应该与 HTML 分离,并且不应依赖于 HTML 中的特定元素或类。

例如,如果你需要为按钮添加点击事件,你应该使用 addEventListener() 方法来添加事件监听器,而不是在 HTML 中使用 onclick 属性。此外,在添加事件监听器之前,你应该检查该元素是否存在于页面上。

// 好的做法
var button = document.getElementById('myButton');
if (button) {
    button.addEventListener('click', function() {
        console.log('Button clicked');
    });
}
  1. 使用编码标准。

使用编码标准有助于确保你的代码一致且易于阅读。WordPress 有一个 JavaScript 编码标准,你可以使用它来确保你的代码与 WordPress 代码库的其他部分保持一致。

  1. 验证并检查你的代码

使用 linter 检查你的代码是否存在错误和潜在问题。这有助于及早发现错误,并确保你的代码一致且易于阅读。

ESLint 是一个流行的 JavaScript linter,可用于检查你的代码是否存在错误和潜在问题。你可以通过 @wordpress/scripts 包配置你的主题,使用 ESLint 检查你的 JavaScript 代码。

  1. 确保你的主题在没有 JavaScript 的情况下也能工作

首先确保你的网站主题在没有 JavaScript 的情况下也能工作——然后添加 JavaScript 以提供额外的功能。这是一种渐进增强的形式,这种策略强调网页内容优先,允许每个人访问网页的基本内容和功能。

  1. 资源加载

对非立即需要的资源使用懒加载。为此,请识别对内容不关键的资源,并仅在需要时加载它们。

jQuery

jQuery 是一个 JavaScript 库,在 Web 开发的早期阶段使用率有所增加。然而,随着 JavaScript 的改进,对于许多常见任务,通常不再需要使用 jQuery。

如果不需要,就不要使用 jQuery——你可能不需要 jQuery 是一个很棒的网站,它向你展示了如何使用纯 JavaScript 完成许多常见任务。

例如,如果你需要按 ID 选择一个元素,你可以在纯 JavaScript 中使用 document.getElementById() 方法。

// 使用纯 JavaScript 选择元素
var element = document.getElementById('myElement');

另一个很好的例子是,如果你需要发起 AJAX 请求,可以使用纯 JavaScript 中的 fetch() 方法,或者更好的选择是使用 WordPress 的 apiFetch 包。

// jQuery
$.ajax({
  url: 'https://example.com/wp-json/wp/v2/posts',
  success: function( data ) {
      console.log( data );
  }
});

// Plain JavaScript
fetch('https://example.com/wp-json/wp/v2/posts')
  .then(data => console.log(data));

// apiFetch
apiFetch( { path: '/wp/v2/posts' } ).then( posts => {
    console.log( posts );
} );

如果你必须在主题中使用 jQuery,你应该使用 WordPress 自带的 jQuery 版本。

在加载主题的脚本时,你应该将 jQuery 指定为依赖项,将其包含在依赖数组中。

add_action( 'wp_enqueue_scripts', 'my_theme_scripts' );
function my_theme_scripts() {
    wp_enqueue_script( 
        'my-script', 
        get_template_directory_uri() . '/js/my-script.js', 
        array( 'jquery' ), 
        '1.0', 
        true 
    );
}

这将确保 jQuery 在你的脚本加载之前被加载,并且使用 WordPress 自带的版本。

由于 WordPress 自带的 jQuery 以 noConflict() 模式加载,你还应该将代码包裹在一个立即调用函数表达式(IIFE)中。

( function( $ ) {
    // Your jQuery code goes here
} )( jQuery );

这样可以防止其他 JavaScript 库使用 $ 变量与你的 jQuery 代码发生冲突。

进一步阅读

关于这些以及开发主题时的其他 JavaScript 最佳实践,请务必阅读 WordPress 开发者手册高级主题部分中的 JavaScript 最佳实践手册页面。

UI 最佳实践

在设计 WordPress 主题时,考虑主题的用户界面非常重要。

在本课中,你将学习用户界面设计,以及设计主题用户界面的一些最佳实践。

什么是用户界面设计?

网站的用户界面(UI)是人与网站之间进行交互的空间。这通常被称为网站前端。

良好的用户界面设计的目标是实现有效的交互,也就是良好的用户体验,这样网站就能提供有助于用户决策过程的良好反馈。

糟糕的用户界面设计可能导致令人沮丧的用户体验,并可能流失网站访客,这对你的主题用户来说不是一个好结果。

在设计主题时,确保主题元素提供良好的用户体验非常重要。

让我们深入了解设计 WordPress 主题用户界面的一些最佳实践。

Logo 链接到首页

主题的 Logo 应链接到网站的首页。

如果你在经典主题中使用 custom_logo() 函数,或在区块主题中使用站点 Logo 区块,Logo 会自动链接到首页。

如果你使用任何类型的自定义头部,应确保 Logo 链接到首页。

以下是一个使用 home_url() 函数将 Logo 链接到首页的示例:

<a href="<?php echo esc_url( home_url( '/' ) ); ?>">
    <img src="<?php echo get_stylesheet_directory_uri(); ?>/logo.png" alt="<?php esc_attr_e( 'Home Page', 'textdmomain' );?>" />
</a>

描述性锚文本

在为主题中显示的内容创建链接时,请确保使用描述性锚文本。

锚文本是链接的可见文本。描述性锚文本应让读者了解点击链接时将执行的操作。

以下是一个糟糕的描述性锚文本示例:

The best way to learn WordPress is to start using it. To Download WordPress, <a href="https://wordpress.org/download/">click here</a>.

“点击这里”并不能很好地描述点击链接后会发生什么。

以下是编写锚文本的更好方式:

The best way to learn <a href="https://wordpress.yuannext.com/">WordPress</a> is to start using it. <a href="https://wordpress.org/download/">Download WordPress</a> to get started.

“下载 WordPress” 这个文本描述了点击链接后会发生什么。

为链接添加下划线样式

谈到链接,好的主题设计意味着保留链接的默认样式,即显示下划线。

有些设计师使用 CSS 禁用链接的下划线。然而,这样做会导致可用性和可访问性问题,因为从周围文本中识别超链接变得更加困难。

不同的链接颜色

在链接上使用颜色是一种视觉提示,表明文本是可点击的。

HTML 链接是少数具有状态的元素之一。两个主要状态是已访问和未访问。已访问表示用户已点击链接并访问了其指向的页面,未访问表示用户尚未点击该链接。

默认情况下,未访问的链接是蓝色,已访问的链接是紫色。

为这两种状态设置不同的颜色有助于用户识别他们之前访问过的页面。

此外,链接还有另外 3 种状态:

  • 悬停,当鼠标悬停在元素上时
  • 聚焦,类似于悬停,但适用于键盘用户
  • 激活,当用户正在点击链接时

由于悬停和聚焦具有相似的含义,有时设计师会给它们相同的样式。

然而,悬停和聚焦有不同的交互模式。

如果你选择微妙的悬停状态,你应该有一个更易识别的聚焦状态。

悬停在链接上是一种定向活动,用户知道他们在页面中的位置,只需要识别该位置是否可链接。

聚焦是一种非定向活动,用户需要发现他们的焦点在从上一个位置移动后到了哪里。

注意 Twenty Twenty-Four 主题中的菜单链接,当鼠标悬停时会添加下划线样式,但通过键盘切换焦点时则显示边框。

颜色对比度

颜色对比度指的是屏幕上两种颜色之间的差异。

例如,注意 Twenty Twenty-Four 主题中默认按钮样式具有深色背景和浅色文字。如果你将文字颜色改为深色,按钮将更难阅读。

WebAIM 是一个非营利性网络可访问性组织,它提供了一个颜色对比度计算器,帮助你确定网站设计中的对比度。

你可以输入背景色和前景色,查看对比度是否满足 Web 内容可访问性指南(WCAG)2.0 的要求。

WCAG 2.0 要求普通文本的对比度达到 4.5:1 才能符合 AA 级标准。

足够的字体大小

让你的文字易于阅读。

通过将文字设置得足够大,你可以提升网站的可用性,使内容更容易理解。14px 是最小的文字尺寸。

将标签与输入框关联

在使用接受输入的 HTML 元素时,请确保使用 for 属性将标签与输入框关联起来。

<label for="name">Name</label>
<input type="text" id="name" name="name" placeholder="John Smith" />

这样用户就可以点击标签,并将焦点聚焦到输入框上。

占位符文本

开发者经常在输入元素上使用占位符,向用户展示输入内容的示例。

<label for="name">Name</label>
<input type="text" id="name" name="name" placeholder="John Smith" />

当用户将光标放入输入框并开始输入时,占位符文本会消失。

然而,如果使用不当,占位符可能会成为用户体验和可访问性的噩梦。

因此,请确保正确使用占位符,或者干脆不用。

如果你决定使用占位符,请确保它提示的是输入框所需的数据类型,而不是替代输入框的标签。

描述性按钮

网络上充斥着含义不清的按钮。还记得你上次在登录表单上使用“确定”或“提交”按钮吗?

在按钮上选择更合适的词语可以让你的网站更易用。尝试使用 [动词] [名词] 的模式。例如“提交表单”,而不仅仅是“提交”。

这描述了用户点击按钮时会发生什么。

一个很好的例子是单篇文章模板中的评论表单,它使用了“发表评论”,而不仅仅是“提交”。

进一步阅读

如需了解主题开发过程中用户界面最佳实践的更多信息,请参考 WordPress 主题开发者手册高级主题部分中的 UI 最佳实践文档。