“Block”(区块)是用于描述标记单元的抽象术语,这些单元组合在一起形成网页的内容或布局。这一理念将当前 WordPress 中通过短代码、自定义 HTML 和嵌入发现所实现的概念整合为一个统一的 API 和用户界面体验。
如需更多背景信息,请参阅 What Are Little Blocks Made Of?,文章来自 Make WordPress Design 博客。
了解如何为 WordPress 区块编辑器创建你的第一个区块。从设置开发环境、工具到熟悉新的开发模型,本教程涵盖了开始创建区块所需的所有知识。安装
安装模块
npm install @wordpress/blocks --save
此包假设您的代码将在 ES2015+ 环境中运行。如果您使用的环境对这些语言特性和 API 的支持有限或完全不支持,您应该在代码中包含 @wordpress/babel-preset-default 随附的 polyfill。
API
cloneBlock
给定一个区块对象,返回该区块对象的副本,可选择合并新属性以及/或替换其内部区块。
参数
- block
Block: 区块实例。 - mergeAttributes
Record< string, unknown >: 区块属性。 - newInnerBlocks
Block[]: 嵌套区块。
返回
Block: 克隆的区块。
cloneSanitizedBlock
给定一个区块对象,在清理其属性的同时返回该区块对象的副本,可选择合并新属性以及/或替换其内部区块。
参数
- block
Block: 区块实例。 - mergeAttributes
Record< string, unknown >: 区块属性。 - newInnerBlocks
Block[]: 嵌套区块。
返回
Block: 克隆的区块。
createBlock
根据区块类型和属性返回一个区块对象。
参数
- name
string: 区块名称。 - attributes
Record< string, unknown >: 区块属性。 - innerBlocks
Block[]: 嵌套区块。 - innerContent
Array< string | null >: 与内部区块交错的静态 HTML 片段,其中null条目标记内部区块位置。仅适用于 Custom HTML 区块。
返回
Block: 区块对象。
createBlocksFromInnerBlocksTemplate
给定一个 InnerBlocks 模板数组或区块对象数组,从中返回创建的区块数组。它处理将 InnerBlocks 作为区块的情况,将其转换为适当的格式以继续递归处理。
参数
- innerBlocksOrTemplate
Array< Block | TemplateBlock >: 嵌套区块或 InnerBlocks 模板。
返回
Block[]: 区块对象数组。
doBlocksMatchTemplate
通过比较区块名称来检查区块列表是否与模板匹配。
参数
- blocks
Block[]: 区块列表。 - template
TemplateItem[]: 区块模板。
返回
boolean: 区块列表是否与模板匹配。
findTransform
给定一组转换规则,返回优先级最高的转换规则,其中谓词函数返回真值。优先级较高的转换规则具有较低的优先级值(即在优先级顺序中排在前面)。如果转换规则集为空或谓词函数对所有条目都返回假值,则返回 null。
参数
- transforms
T[]: 要搜索的转换规则。 - predicate
( transform: T ) => boolean: 在匹配的转换规则上返回 true 的函数。
返回
T | null: 优先级最高的转换规则候选项。
getBlockAttributes
根据其类型返回已注册区块节点的区块属性。
参数
- blockTypeOrName
string | BlockType: 区块类型或名称。 - innerHTML
string | Node | undefined: 原始区块内容。 - attributes
Record< string, unknown >: 已知的区块属性(来自分隔符)。
返回
Record< string, unknown >: 所有区块属性。
getBlockAttributesNamesByRole
按 role 过滤区块属性并返回它们的名称。
参数
- name
string: 区块属性的名称。 - role
string: 区块属性的角色。
返回
string[]: 具有提供角色的属性名称。
getBlockBindingsSource
根据其名称返回已注册的区块绑定源。
参数
- name
string: 区块绑定源名称。
返回
BlockBindingsSource | undefined: 区块绑定源。
日志
6.7.0 在 WordPress 核心中引入。
getBlockBindingsSources
返回所有已注册的区块绑定源。
返回
Record< string, BlockBindingsSource >: 区块绑定源。
日志
6.7.0 在 WordPress 核心中引入。
getBlockContent
给定一个区块对象,返回该区块的内部 HTML 标记。
参数
- block
Block: 区块实例。
返回
string: HTML。
getBlockDefaultClassName
根据其名称返回区块的默认类名。
参数
- blockName
string: 区块名称。
返回
string: 区块的默认类。
getBlockFromExample
未记录的声明。
getBlockMenuDefaultClassName
根据其名称返回区块的默认菜单项类名。
参数
- blockName
string: 区块名称。
返回
string: 区块的默认菜单项类。
getBlockSupport
如果定义了某功能的区块支持值,则返回该值。
参数
- nameOrType
string | BlockType: 区块名称或类型对象 - feature
string: 要检索的功能 - defaultSupports
unknown: 如果未明确定义时返回的默认值
返回
unknown: 区块支持值
getBlockTransforms
返回给定转换方向的正常区块转换规则,可选地针对特定名称的区块,如果没有转换规则则返回空数组。如果未提供区块名称,则返回所有区块的转换规则。正常转换规则对象包含 blockName 作为属性。
参数
- direction
'to' | 'from': 转换方向(“to”,“from”)。 - blockTypeOrName
string | BlockType: 区块类型或名称。
返回
NormalizedBlockTransform[]: 指定方向的区块转换规则。
getBlockType
返回已注册的区块类型。
参数
- name
string: 区块名称。
返回
BlockType | undefined: 区块类型。
getBlockTypes
返回所有已注册的区块。
返回
BlockType[]: 区块设置。
getChildBlockNames
返回包含给定区块子区块的数组。
参数
- blockName
string: 区块名称(例如:“latest-posts”)。
返回
string[]: 子区块名称数组。
getDefaultBlockName
检索默认区块名称。
返回
string | null: 区块名称。
getFreeformContentHandlerName
检索处理非区块内容的区块名称,如果尚未定义处理程序,则返回 undefined。
返回
string | null: 区块名称。
getGroupingBlockName
检索用于处理分组交互的区块名称。
返回
string | null: 区块名称。
getPhrasingContentSchema
未记录的声明。
getPossibleBlockTransformations
返回作为参数接收的区块集可以转换成的区块类型数组。
参数
- blocks
Block[]: 区块数组。
返回
BlockTypeWithTransformMetadata[]: 参数中的区块可以转换到的区块类型。
getSaveContent
给定包含保存渲染实现和属性的块类型,返回要保存的静态标记。
参数
- blockTypeOrName
string | BlockType | undefined | null: 块类型或名称。 - attributes
Record< string, unknown >: 块属性。 - innerBlocks
Block[]: 嵌套块。
返回
string: 保存内容。
getSaveElement
给定包含保存渲染实现和属性的块类型,返回要保存的增强元素;如果期望原始 HTML,则返回字符串。
参数
- blockTypeOrName
string | BlockType: 块类型或名称。 - attributes
Record< string, unknown >: 块属性。 - innerBlocks
Block[]: 嵌套块。
返回
unknown: 保存元素或原始 HTML 字符串。
getUnregisteredTypeHandlerName
检索处理未注册块类型的块的名称,如果未定义任何处理器,则返回 undefined。
返回
string | null: 块名称。
hasBlockSupport
如果块定义了某功能的支持,则返回 true,否则返回 false。
参数
- nameOrType
string | BlockType: 块名称或类型对象。 - feature
string: 要测试的功能。 - defaultSupports
boolean: 如果未明确定义,该功能是否默认受支持。
返回
boolean: 块是否支持该功能。
hasChildBlocks
返回一个布尔值,指示块是否有子块。
参数
- blockName
string: 块的名称(例如:“latest-posts”)。
返回
boolean: 如果块包含子块则为 true,否则为 false。
hasChildBlocksWithInserterSupport
返回一个布尔值,指示块是否具有至少一个具有插入器支持的子块。
参数
- blockName
string: 块类型名称。
返回
boolean: 如果块包含至少一个具有插入器支持的子块则为 true,否则为 false。
isReusableBlock
确定给定的块是否为可重用块。这是一种特殊的块类型,用于指向通过 API 存储的全局块。
参数
- blockOrType
Block | BlockType | null | undefined: 要测试的块或块类型。
返回
boolean: 给定的块是否为可重用块。
isTemplatePart
确定给定的块是否为模板部分。这是一种特殊的块类型,允许通过可重用的设计元素来组合页面模板。
参数
- blockOrType
Block | BlockType | null | undefined: 要测试的块或块类型。
返回
boolean: 给定的块是否为模板部分。
isUnmodifiedBlock
确定块的属性是否等于默认属性,这意味着块未被修改。
参数
- block
Block: 块对象。 - role
string: 可选角色,用于过滤属性以进行检查修改。
返回
boolean: 块是否为未修改的块。
isUnmodifiedDefaultBlock
确定块是否为默认块,且其属性等于默认属性,这意味着块未被修改。
参数
- block
Block: 块对象 - role
string: 可选角色,用于过滤属性以进行检查修改。
返回
boolean: 块是否为未修改的默认块。
isValidBlockContent
已弃用 请使用 validateBlock 以避免数据丢失。
如果解析后的块在给定输入内容的情况下是有效的,则返回 true。如果块在使用假设属性序列化时内容与原始值匹配,则认为该块有效。
在开发环境中,如果无效则记录到控制台。
参数
- blockTypeOrName
BlockType | string: 块类型。 - attributes
Record< string, unknown >: 解析后的块属性。 - originalBlockContent
string: 原始块内容。
返回
boolean: 块是否有效。
isValidIcon
检查参数是否为有效图标的函数。
参数
- icon
unknown: 要检查的参数。
返回
boolean: 如果参数是有效图标则为 true,否则为 false。
normalizeIconObject
接收由块在注册期间设置的图标,并返回一个新的标准化图标对象,以便我们可以在代码库中仅依赖一种可能的图标结构。
参数
- icon
BlockTypeIcon | undefined: 块类型图标的渲染行为;可以是 Dashicon 缩写、元素或组件之一。
返回
BlockTypeIconDescriptor: 描述图标的对象。
parse
利用基于通过解析表达式语法定义的 Gutenberg 语法的优化令牌驱动解析器,利用由块分隔符提供的常规节奏——通过 HTML 注释在语法上组成——给定一个通用 HTML 文档作为输入,返回块列表数组表示。
这是一个递归下降解析器,一次性线性扫描输入文档。它不直接递归,而是利用蹦床机制来防止栈溢出。此初始传递主要关注分离和隔离文档中序列化的块,而不是块内的内容。
相关
参数
- content
string: 帖子内容。 - options
ParseOptions: 处理块解析的额外选项。
返回
Block[]: 块列表。
parseWithAttributeSchema
给定块的原始内容和属性的模式,根据其来源返回属性的值。
参数
- innerHTML
string | Node | undefined: 块的原始内容。 - attributeSchema
BlockAttribute: 属性的模式。
返回
unknown: 属性值。
pasteHandler
将 HTML 字符串转换为已知块。剥离其他所有内容。
参数
- options
RawHandlerOptions: - options.HTML
RawHandlerOptions[ 'HTML' ]: 要转换的 HTML。 - options.plainText
RawHandlerOptions[ 'plainText' ]: 纯文本版本。 - options.mode
RawHandlerOptions[ 'mode' ]: 将内容处理为块或内联内容。_ ‘AUTO’: 根据传递的内容决定。_ ‘INLINE’: 始终作为内联内容处理,并返回字符串。* ‘BLOCKS’: 始终作为块处理,并返回块数组。 - options.tagName
RawHandlerOptions[ 'tagName' ]: 内容将被插入的标签。
返回
Block[] | string: 块列表或字符串,取决于handlerMode。
privateApis
未记录的声明。
rawHandler
将 HTML 字符串转换为已知块。
用法
import { rawHandler } from '@wordpress/blocks';
const blocks = rawHandler( { HTML: '<p>Hello</p><p>World</p>' } );
参数
- options
{ HTML?: string; }: 选项。 - options.HTML
string: 要转换的 HTML。
返回
Block[]: 块列表。
registerBlockBindingsSource
使用定义其行为的新块绑定源对象进行注册。注册后,该源可用于连接到受支持的块属性。
用法
import { _x } from '@wordpress/i18n';
import { registerBlockBindingsSource } from '@wordpress/blocks';
registerBlockBindingsSource( {
name: 'plugin/my-custom-source',
label: _x( 'My Custom Source', 'block bindings source' ),
usesContext: [ 'postType' ],
getValues: getSourceValues,
setValues: updateMyCustomValuesInBatch,
canUserEditValue: () => true,
} );
参数
- source
BlockBindingsSource: 描述块绑定源的对象。
更新日志
6.7.0 在 WordPress 核心中引入。
registerBlockCollection
注册一个新的区块集合,用于在插入器中将同一命名空间下的区块进行分组。
用法
import { __ } from '@wordpress/i18n';
import { registerBlockCollection, registerBlockType } from '@wordpress/blocks';
// 注册集合。
registerBlockCollection( 'my-collection', {
title: __( 'Custom Collection' ),
} );
// 在同一命名空间中注册一个区块,以将其添加到集合中。
registerBlockType( 'my-collection/block-name', {
title: __( 'My First Block' ),
edit: () => <div>{ __( 'Hello from the editor!' ) }</div>,
save: () => <div>'Hello from the saved content!</div>,
} );
参数
- namespace
string: 在插入器中按此命名空间对区块进行分组;对应于区块命名空间。 - settings
{ title: string; icon?: Icon; }: 区块集合设置。 - settings.title
string: 在区块插入器中显示的标题。 - settings.icon
Icon: 在区块插入器中显示的图标。
registerBlockStyle
为指定的区块类型注册新的区块样式。
有关将样式与 CSS 连接的更多信息,请参阅官方文档。
用法
import { __ } from '@wordpress/i18n';
import { registerBlockStyle } from '@wordpress/blocks';
import { Button } from '@wordpress/components';
const ExampleComponent = () => {
return (
<Button
onClick={ () => {
registerBlockStyle( 'core/quote', {
name: 'fancy-quote',
label: __( 'Fancy Quote' ),
} );
} }
>
{ __( 'Add a new block style for core/quote' ) }
</Button>
);
};
参数
- blockNames
string | string[]: 区块名称,例如 “core/latest-posts” 或[“core/group”, “core/columns”]。 - styleVariation
BlockStyle | BlockStyle[]: 包含name(应用于区块的类名)和label(向用户标识变体)的对象。
registerBlockType
注册一个新的区块,需提供唯一的名称和一个定义其行为的对象。注册后,该区块将在实现区块的任何编辑器界面中作为选项提供。
有关注册自定义区块的更深入信息,请参阅创建区块教程。
用法
import { __ } from '@wordpress/i18n';
import { registerBlockType } from '@wordpress/blocks';
registerBlockType( 'namespace/block-name', {
title: __( 'My First Block' ),
edit: () => <div>{ __( 'Hello from the editor!' ) }</div>,
save: () => <div>Hello from the saved content!</div>,
} );
参数
- blockNameOrMetadata
string | BlockConfiguration< Attributes >: 区块类型名称或其元数据。 - settings
Partial< SettingsBlockConfiguration< Attributes > >: 区块设置。
返回
BlockType | undefined: 如果成功注册则返回区块;否则返回undefined。
registerBlockVariation
为指定的区块类型注册一个新的区块变体。
有关区块变体的更多信息,请参阅官方文档。
用法
import { __ } from '@wordpress/i18n';
import { registerBlockVariation } from '@wordpress/blocks';
import { Button } from '@wordpress/components';
const ExampleComponent = () => {
return (
<Button
onClick={ () => {
registerBlockVariation( 'core/embed', {
name: 'custom',
title: __( 'My Custom Embed' ),
attributes: { providerNameSlug: 'custom' },
} );
} }
>
__( 'Add a custom variation for core/embed' ) }
</Button>
);
};
参数
- blockName
string: 区块名称(示例:“core/columns”)。 - variation
BlockVariation | BlockVariation[]: 描述区块变体的对象。
sanitizeBlockAttributes
确保 attributes 仅包含由区块类型定义的值,并为缺失的属性合并默认值。
参数
- name
string: 区块名称。 - attributes
Record< string, unknown >: 区块属性。
返回
Record< string, unknown >: 经过清理的属性。
serialize
接受一个或多个区块,并返回序列化后的帖子内容。
参数
- blocks
Block | Block[]: 要序列化的区块。 - options
BlockSerializationOptions: 序列化选项。
返回
string: 帖子内容。
serializeRawBlock
将区块节点序列化为原生的基于 HTML 注释的区块格式。注意:此函数旨在重新序列化由有效解析器解析的区块,并跳过任何验证步骤。这并非用于内存中区块的通用序列化函数。对于大多数用途,请参阅 @wordpress/blocks 包中提供的以下函数:
相关
- serializeBlock
- serialize 有关由有效解析器返回的区块节点格式的更多信息:
@wordpress/block-serialization-default-parser包@wordpress/block-serialization-spec-parser包
参数
- rawBlock
RawBlock: 由有效解析器返回的区块节点。 - options
[SerializeRawBlockOptions]: 序列化选项。
返回
string: 表示区块的 HTML 字符串。
setCategories
设置区块类别。
用法
import { __ } from '@wordpress/i18n';
import { store as blocksStore, setCategories } from '@wordpress/blocks';
import { useSelect } from '@wordpress/data';
import { Button } from '@wordpress/components';
const ExampleComponent = () => {
// 获取当前类别列表。
const blockCategories = useSelect(
( select ) => select( blocksStore ).getCategories(),
[]
);
return (
<Button
onClick={ () => {
// 在现有列表中添加自定义类别。
setCategories( [
...blockCategories,
{ title: 'Custom Category', slug: 'custom-category' },
] );
} }
>
{ __( 'Add a new custom block category' ) }
</Button>
);
};
参数
- categories
BlockCategory[]: 区块类别。
setDefaultBlockName
分配默认区块名称。
用法
import { setDefaultBlockName } from '@wordpress/blocks';
const ExampleComponent = () => {
return (
<Button onClick={ () => setDefaultBlockName( 'core/heading' ) }>
{ __( 'Set the default block to Heading' ) }
</Button>
);
};
参数
- name
string: 区块名称。
setFreeformContentHandlerName
分配用于处理非区块内容的区块名称。
参数
- blockName
string: 区块名称。
setGroupingBlockName
分配用于处理区块分组交互的区块名称。
此函数允许您选择另一个区块来对其他区块进行分组,而不是默认的 core/group 区块。此函数必须在组件中使用或在 DOM 完全加载时使用。请参阅 https://developer.wordpress.org/block-editor/reference-guides/packages/packages-dom-ready/
用法
import { setGroupingBlockName } from '@wordpress/blocks';
const ExampleComponent = () => {
return (
<Button onClick={ () => setGroupingBlockName( 'core/columns' ) }>
{ __( 'Wrap in columns' ) }
</Button>
);
};
参数
- name
string: 区块名称。
setUnregisteredTypeHandlerName
分配用于处理未注册区块类型的区块名称。
参数
- blockName
string: 区块名称。
store
区块命名空间的存储定义。
相关
switchToBlockType
将一个或多个块转换为一个或多个新类型的块。
参数
- blocks
Block[] | Block: 块数组或块对象。 - name
string: 块名称。 - variationName
string: 可选的目标块变体名称。
返回
Block[] | null: 块数组或 null。
synchronizeBlocksWithTemplate
将块列表与块模板同步。
将块列表与块模板同步意味着我们遍历块,如果它与模板中相同位置的块匹配(即名称相同),则保留该块不变;如果不匹配,则根据模板创建一个新块。不在模板中的额外块将被移除。
参数
- blocks
Block[]: 块列表。 - template
TemplateItem[]: 块模板。
返回
Block[]: 更新后的块列表。
unregisterBlockBindingsSource
通过提供其名称来注销块绑定源。
用法
import { unregisterBlockBindingsSource } from '@wordpress/blocks';
unregisterBlockBindingsSource( 'plugin/my-custom-source' );
参数
- name
string: 要注销的块绑定源的名称。
日志记录
6.7.0 在 WordPress core 中引入。
unregisterBlockStyle
注销给定块的块样式。
用法
import { __ } from '@wordpress/i18n';
import { unregisterBlockStyle } from '@wordpress/blocks';
import { Button } from '@wordpress/components';
const ExampleComponent = () => {
return (
<Button
onClick={ () => {
unregisterBlockStyle( 'core/quote', 'plain' );
} }
>
{ __( 'Remove the "Plain" block style for core/quote' ) }
</Button>
);
};
参数
- blockName
string: 块名称(例如:“core/latest-posts”)。 - styleVariationName
string: 应用于块的类名。
unregisterBlockType
注销一个块。
用法
import { __ } from '@wordpress/i18n';
import { unregisterBlockType } from '@wordpress/blocks';
const ExampleComponent = () => {
return (
<Button
onClick={ () => unregisterBlockType( 'my-collection/block-name' ) }
>
{ __( 'Unregister my custom block.' ) }
</Button>
);
};
参数
- name
string: 块名称。
返回
BlockType | undefined: 之前的块值,如果成功注销;否则为undefined。
unregisterBlockVariation
注销为给定块类型定义的块变体。
用法
import { __ } from '@wordpress/i18n';
import { unregisterBlockVariation } from '@wordpress/blocks';
import { Button } from '@wordpress/components';
const ExampleComponent = () => {
return (
<Button
onClick={ () => {
unregisterBlockVariation( 'core/embed', 'youtube' );
} }
>
{ __( 'Remove the YouTube variation from core/embed' ) }
</Button>
);
};
参数
- blockName
string: 块的名称(例如:“core/columns”)。 - variationName
string | string[]: 为该块定义的变体名称。
updateCategory
更新一个分类。
用法
import { __ } from '@wordpress/i18n';
import { updateCategory } from '@wordpress/blocks';
import { Button } from '@wordpress/components';
const ExampleComponent = () => {
return (
<Button
onClick={ () => {
updateCategory( 'text', { title: __( 'Written Word' ) } );
} }
>
{ __( 'Update Text category title' ) }
</Button>
);
};
参数
- slug
string: 块分类别名。 - category
Partial< BlockCategory >: 包含应更新的分类属性的对象。
validateBlock
如果解析后的块在给定的输入内容下是有效的,则返回一个 isValid 属性设置为 true 的对象。如果在使用假设的属性进行序列化时,内容与原始值匹配,则认为块是有效的。如果块无效,此函数还将返回所有验证问题。
参数
- block
Block: 块对象。 - blockTypeOrName
BlockType | string: 块类型或名称,如果未提供则从块中推断。
返回
[ boolean, LoggerItem[] ]: 验证结果。
withBlockContentContext
已弃用
用于使用上下文注入 BlockContent 到包装组件的高阶组件。
参数
- OriginalComponent
T: 要增强的组件。
返回
T: 相同的组件。
为此包做出贡献
这是 Gutenberg 项目的一部分独立包。该项目组织为一个 monorepo。它由多个自包含的软件包组成,每个包都有特定的用途。此 monorepo 中的包发布到 npm,并被 WordPress 以及其他软件项目使用。
要了解有关为此包或整个 Gutenberg 做出贡献的更多信息,请阅读项目的主要 贡献者指南。