社区新闻

面向开发者的新特性有哪些?(2023年7月)

查看官方原文 ↗ 发布于

今天的《面向开发者的新特性有哪些?》标志着 WordPress 开发者博客上专注于扩展者的月度汇总已满六个月。所以,准备好派对帽、香槟杯和蛋糕吧。没有蛋糕可不算庆祝。

时机再好不过了。这是一篇内容丰富的文章,充满了许多开发者福利。

这正是你所期待的——WordPress 6.3 仅剩一个月就要发布了。官方发布日期是 2023 年 8 月 8 日。2023 年 7 月 20 日还将举行一场现场产品演示

所以,如果你还没有尝试,请试试WordPress 6.3 Beta 36.3 测试说明)。你需要它以及至少 Gutenberg 16.1 来测试最新功能。

说到 WordPress 6.3,该版本将正式停止对 PHP 5 的支持。8 月 8 日之后,你需要运行 PHP 7.0.0 或更高版本来使用 WordPress。

亮点

第三阶段更新

Gutenberg 首席架构师 Matías Ventura 在其 2023 年 3 月的第三阶段:协作大纲上发布了四篇更新。

这四篇文章将让你了解路线图的最新进展,这可以说是 WordPress 编辑工作流程有史以来最大的变化:

  • 实时协作涵盖了并发协作、共享编辑、同行可见性以及解除当前编辑限制的计划。
  • 工作流程设想在整个编辑过程中实现无缝协作,从初稿到发布及以后。
  • 修订提议彻底改革当前系统,采用一个适用于区块并在每个数据层(从服务器堆栈到用户的最新编辑)跟踪更改的系统。
  • 媒体库旨在扩展媒体管理功能,统一界面并改进整体媒体工作流程。

在这些文章中,Matías 明确指出这还处于早期阶段。第三阶段是一个雄心勃勃的计划,将改变我们所知的发布方式,它需要你的想法(和代码!)才能实现。

命令面板

站点编辑器中带有搜索/命令输入的模式覆盖层。

命令面板(前身为命令中心)现在有了一个公共 API。这意味着你可以在主题和插件中扩展它以添加自定义命令,甚至可以取消注册核心命令。

该面板让你可以轻松控制以下领域:

文章模板的区块间距和 CSS 网格布局

WordPress 文章编辑器,显示三列网格的文章。

Gutenberg 16.0 对查询循环及其嵌套的文章模板区块的布局工作方式进行了重大更改

在 16.0 之前,网格选项使用 CSS Flexbox 模块(及其换行选项)将文章布局为列。

现在该功能具有真正的 CSS 网格支持。对大多数人来说,这个区块看起来没什么不同。但对你来说,它为你打开了整个 CSS 网格规范,供你在自定义区块样式中使用。

此外,现在你可以在列表视图或网格视图中控制文章之间的区块间距。在 16.0 之前,这是一个硬编码的值,很少与主题的间距规则匹配。

脚注区块

WordPress 文章编辑器,包含几段文本和底部的脚注部分。工具栏中突出显示了一个带有“脚注”的下拉菜单。

Gutenberg 16.1 中新增了一个脚注区块,允许你在任何富文本区域插入脚注链接。链接插入后,它会在文章底部显示一个脚注列表。你可以在那里编辑每个脚注的内容。

在很大程度上,这是一个面向用户的变化,但你可以设置该区块的样式以匹配你的主题。

插件和工具

WordPress 开发模式

WordPress 6.3 将带来一个 WP_DEVELOPMENT_MODE 常量,用于表示特定于上下文的开发模式,你可以将其设置为 corethemeplugin。将该常量设置为空字符串意味着你未使用开发模式。

此外,一个新的 wp_get_development_mode() 函数将返回该常量的值。

这个模式有什么用?

如果你曾经在深入开发主题时,theme.json 缓存干扰了你的工作流程,现在你可以设置开发模式以编程方式关闭缓存。

将来,你可能会使用这些模式来获得更清晰的错误消息——或者构建你自己的工具。

在脚本上设置 async 和 defer 属性

目前,如果你希望脚本在页脚加载,可以使用布尔值来实现。
但在 6.3 中,你将能够在 wp_register_script()wp_enqueue_script()$in_footer 参数中使用数组。该数组将采用以下形式:

array(
	'strategy'  => 'defer', // 或 'async'
	'in_footer' => true     // 或 false
)

文章编辑器 iframe 回归

自 Gutenberg 16.0 起,文章编辑器 iframe 回归了。你想念它吗?你需要将所有已注册区块在其 block.json 文件中的 API 版本设置为 3。无论如何,你可能应该更新这些版本——当然,除非你有理由让某些自定义区块停留在版本 2。

如果你之前使用 enqueue_block_editor_assets 钩子来加载针对内容画布的 CSS 或 JavaScript,它在 iframe 编辑器中将无法工作。请参阅此 GitHub 评论中发布的解决方案进行更新。

组件更新

一个新的 HeadingLevelDropdown 组件已经到来,供你在自己的区块中使用。它允许用户从 H1-H6 或段落标签中选择标题。新组件与标题区块是分开的,因此你可以重用核心代码。

Button 组件有一个新的 size 属性,你可以将其设置为 small(24px)、compact(32px)或 default(36px)。当 __next40pxDefaultSize 设置为 true 时,default 属性将为 40px。

Toolbar 组件现在使用 Ariakit,这是之前使用的 Reakit 的继任者。你应该会看到更好的性能和更少的错误。你的工具栏交互行为应该与现在一样,但请测试你的自定义区块。

检查主题是否支持站点编辑器

一个新的 is_block_theme 属性让你可以检查 REST API 中的确切信息,由 wp/v2/themes API 响应提供。

操作和过滤器钩子

WordPress 6.3 中将引入几个新钩子:

此外,你将有一个新参数 $previous_status 传递给现有的垃圾箱钩子——pre_trash_postwp_trash_posttrashed_post

首个大图像的增强性能

5 月,性能团队提议添加 fetchpriority="high" 属性以加速最大内容绘制图像。

现在一个解决方案已经合并到核心中,该属性将添加到页面上第一个既非延迟加载也没有冲突的 fetchpriority 属性,且尺寸大于 50,000 平方像素的图像上。

监视模式下更好的区块渲染路径检测

当使用 @wordpress/wp-scripts 运行 start 命令时,一个新的 webpack 插件处理更新 block.json 中定义的区块渲染路径。本质上,这是一种更高效的方式来查找文件的更改。最棒的部分是什么?你只需使用脚本包即可获得速度提升——无需对代码或其他任何东西进行额外更新。

错误修复

经典区块和简码区块在解析时不再转换 HTML 实体。此更改防止了基于用于解析 HTML 的库的错误。

到目前为止,你可以在查询循环区块中选择多个作者。但你只会得到第一个作者的文章。一个最近的补丁应该在 WordPress 6.3 中修复该行为。

相关的用户界面更改

现在你可以在站点编辑器中编辑和创建新页面——只需在菜单中选择页面。如果你的插件挂钩到内容创建过程,你需要测试它们的兼容性。

主题

区块模式的新源属性

区块模式 API 新增了一个 source 属性,允许主题、插件、核心和其他来源定义模式的来源。如果你从主题注册模式,你的 source 属性应为 theme。对于插件,使用 plugin

样式变体的描述

在主题的 /styles 文件夹中定义的全局样式变体现在有一个 description 属性,以提高可访问性。使用它为屏幕阅读器提供有关你设计的更多信息;以前,你只有标题。

经典主题支持改进

经典主题在 WordPress 6.3 中得到了一些关爱:

文章内容区块回归文章编辑器!(某种程度上)

Gutenberg 15.9 将文章内容区块移出了文章编辑器,因为编辑器画布就是内容。但这一更改也意味着你无法使用查询循环区块来展示其他文章和页面的内容。

在 Gutenberg 16.1 中,文章内容区块回归文章编辑器,但你只能在查询循环区块内部使用它。

非根粘性定位

Gutenberg 16.1 中的一个拉取请求重新启用了非根区块上的粘性定位。这是一个更大工单的一部分,该工单在合并之前还有几个其他部分需要完成。

调整 gutenberg_get_global_styles() 的返回值

在 WordPress 6.2 中,gutenberg_get_global_styles() 函数返回 CSS 值,而不是 theme.json 中定义的自定义属性。

例如,如果你想获取字体大小,该函数返回 16px,而不是 var( --wp--preset--font-size--medium )。根据你正在做的其他事情,这可能是一个意想不到的结果。

现在有一个更改添加了一个 transforms 键,允许你设置数据格式。目前,它接受一个形式为 array( 'resolve-variables' ) 的值,你可以将值转换为其自定义属性。将来可能会添加更多转换。

移除 theme.json 布局定义支持

Gutenberg 16.1 中,布局定义已从 theme.json 中移除。以前,settings.layout.definitions 为你提供了扩展或覆盖某些核心规则的方法。但这从未得到任何官方支持。并且包含它已经滋生了一些错误。如果你过去使用过这些定义,你需要将它们从你的 theme.json 文件中移除。

请注意,这不会影响在 settings.layout 中自定义内容和宽尺寸。

核心主题中移除了文本域加载

WordPress 自 4.6 版本以来就支持即时翻译加载,自该版本发布以来,主题作者就不再需要调用 load_theme_textdomain()。从 Twenty Seventeen 开始,此函数调用已不再出现在任何默认主题中。

错误修复

上个月,Gutenberg 和核心 WordPress 中修复了几个与主题相关的错误:

  • 当你启用流体排版时,编辑器中现在正确使用了最大视口宽度
  • 文章内容区块的布局设置现在在文章编辑器中应该始终正确。
  • 文章模板区块的网格布局更改最初从核心中移除了列类,但现在它又回来了,以保持向后兼容性
  • WP_Theme::get_post_templates() 中的一个缓存问题(其中区块模板被错误地缓存)已得到修复。

值得注意的面向用户的更改

音乐流媒体平台 Anghami 现已加入受信任的 oEmbed 提供商列表。目前还没有针对它的特定区块变体,但你仍然可以在嵌入区块中显示歌曲和播放列表。

全局样式修订系统已从实验阶段移出</a