### updateBlockListSettings 用于更改指定区块嵌套设置的操作。 **参数** - _clientId_ `string | SettingsByClientId`: 要获取嵌套设置的区块客户端ID,或按客户端ID分组的设置对象 - _settings_ `Object`: 包含嵌套区块新设置的对象 **返回值** - `Object`: 操作对象 ### updateSettings 用于更新区块编辑器设置的操作。 **参数** - _settings_ `Object`: 更新后的设置 **返回值** - `Object`: 操作对象 ### validateBlocksToTemplate 区块有效性是区块状态(在重置时)与模板设置的函数。作为对其在不同状态部分中位置的折中方案,此处将其实现为区块重置操作的副作用。 **参数** - _blocks_ `Array`: 区块数组 ### removeBlock(移除区块) 返回一个操作对象,用于发出信号指示将移除具有指定客户端ID的区块。 **参数** - _clientId_ `string`:要移除的区块的客户端ID。 - _selectPrevious_ `boolean`:如果为 true,则在移除区块时选择前一个区块。 **返回值** - `Object`:操作对象。 ### removeBlocks(移除多个区块) 生成操作对象,用于发出信号指示将移除与指定客户端ID集合对应的区块。 **参数** - _clientIds_ `string|string[]`:要移除的区块的客户端ID。 - _selectPrevious_ `boolean`:如果为 true,则在移除区块时选择前一个区块或直接父级(如果不存在前一个区块)。 ### replaceBlock(替换区块) 将单个区块替换为一个或多个替换区块的操作。 **参数** - _clientId_ `(string|string[])`:要替换的区块的客户端ID。 - _block_ `(Object|Object[])`:替换的区块。 **返回值** - `Object`:操作对象。 ### replaceBlocks(替换多个区块) 将指定区块替换为一个或多个替换区块的操作。 **参数** - _clientIds_ `(string|string[])`:要替换的区块的客户端ID。 - _blocks_ `(Object|Object[])`:替换的区块。 - _indexToSelect_ `number`:要选择的替换区块的索引。 - _initialPosition_ `0|-1|null`:操作后选中区块中光标的初始位置。 - _meta_ `?Object`:可选,传递给操作对象的元数据值。 **返回值** - `Object`:操作对象。 ### replaceInnerBlocks(替换内部区块) 返回一个操作对象,用于发出信号指示应替换具有指定客户端ID的内部区块。 **参数** - _rootClientId_ `string`:其内部区块将被替换的区块的客户端ID。 - _blocks_ `Object[]`:作为新内部区块插入的区块对象。 - _updateSelection_ `?boolean`:如果为 true,将更新区块选择;如果为 false,区块选择不会改变。默认为 false。 - _initialPosition_ `0|-1|null`:初始区块位置。 **返回值** - `Object`:操作对象。 ### resetBlocks(重置区块) 将区块状态重置为指定的区块数组的操作,优先于状态中反映的任何其他编辑内容。 **参数** - _blocks_ `Array`:区块数组。 ### resetSelection(重置选择) 返回一个操作对象,用于发出信号指示应将选择状态重置为指定的选择。 **参数** - _selectionStart_ `WPBlockSelection`:选择的起始位置。 - _selectionEnd_ `WPBlockSelection`:选择的结束位置。 - _initialPosition_ `0|-1|null`:初始区块位置。 **返回值** - `Object`:操作对象。 ### selectBlock(选择区块) 返回一个操作对象,用于发出信号指示已选择具有指定客户端ID的区块,并可选择接受反映其选择方向的位置值。初始位置为 -1 表示反向选择。 **参数** - _clientId_ `string`:区块的客户端ID。 - _initialPosition_ `0|-1|null`:可选的初始位置。传入 -1 表示反向选择,或传入 `null` 以防止聚焦该区块。 **返回值** - `Object`:操作对象。 ### selectionChange(选择变更) 更改用户光标位置的操作。 **参数** - _clientId_ `string|WPSelection`:选中的区块客户端ID。 - _attributeKey_ `string`:选中的区块属性键。 - _startOffset_ `number`:起始偏移量。 - _endOffset_ `number`:结束偏移量。 **返回值** - `Object`:操作对象。 ### selectNextBlock(选择下一个区块) 生成操作对象,用于发出信号指示应选择给定客户端ID之后的下一个区块。 **参数** - _clientId_ `string`:区块的客户端ID。 ### selectPreviousBlock(选择上一个区块) 生成操作对象,用于发出信号指示应选择给定客户端ID之前的上一个区块(或可选择从下到上的第一个父级)。 **参数** - _clientId_ `string`:区块的客户端ID。 - _fallbackToParent_ `boolean`:如果为 true,在没有上一个区块时选择第一个父级。 ### getLowestCommonAncestorWithSelectedBlock 给定一个区块客户端ID,返回与选定客户端ID的最低公共祖先。 **参数** - _state_ `Object`:编辑器状态。 - _clientId_ `string`:用于查找公共祖先客户端ID的起始区块。 **返回值** - `string`:公共祖先客户端ID或未定义值 ### getMultiSelectedBlockClientIds 返回当前多选区块的客户端ID集合,若无多选则返回空数组。 **参数** - _state_ `Object`:编辑器状态。 **返回值** - `Array`:多选区块的客户端ID集合。 ### getMultiSelectedBlocks 返回当前多选区块的对象集合,若无多选则返回空数组。 **参数** - _state_ `Object`:编辑器状态。 **返回值** - `Array`:多选区块对象集合。 ### getMultiSelectedBlocksEndClientId 返回多选集合的结束区块客户端ID,若无多选则返回null。 注意:该ID不一定是选区中的最后一个客户端ID。 **关联函数** - getLastMultiSelectedBlockClientId **参数** - _state_ `Object`:编辑器状态。 **返回值** - `?string`:结束多选的区块客户端ID。 ### getMultiSelectedBlocksStartClientId 返回多选集合的起始区块客户端ID,若无多选则返回null。 注意:该ID不一定是选区中的第一个客户端ID。 **关联函数** - getFirstMultiSelectedBlockClientId **参数** - _state_ `Object`:编辑器状态。 **返回值** - `?string`:开始多选的区块客户端ID。 ### getNextBlockClientId 从给定的参考起始ID返回下一个相邻区块的客户端ID。默认起始点为当前选定区块。若无下一区块则返回null。 **参数** - _state_ `Object`:编辑器状态。 - _startClientId_ `?string`:可选参数,指定搜索起始区块的客户端ID。 **返回值** - `?string`:相邻区块的客户端ID,若无则返回null。 ### getPatternsByBlockTypes 根据模式声明的`blockTypes`属性和区块名称返回匹配的模式列表。模式可通过`blockTypes`集成到工作流中,例如在占位符状态(插入期间)推荐适用模式或进行区块转换。 **参数** - _state_ `Object`:编辑器状态。 - _blockNames_ `string|string[]`:用于匹配模式的单个或多个区块名称。 - _rootClientId_ `?string`:可选参数,指定目标根级客户端ID。 **返回值** - `Array`:基于声明`blockTypes`和区块名称匹配的区块模式列表。 ### getPreviousBlockClientId 从给定的参考起始ID返回上一个相邻区块的客户端ID。默认起始点为当前选定区块。若无上一区块则返回null。 **参数** - _state_ `Object`:编辑器状态。 - _startClientId_ `?string`:可选参数,指定搜索起始区块的客户端ID。 **返回值** - `?string`:相邻区块的客户端ID,若无则返回null。 ### getSelectedBlock 返回当前选定的区块对象,若无选定区块则返回null。 **使用示例** ```js import { select } from '@wordpress/data'; import { store as blockEditorStore } from '@wordpress/block-editor'; // 初始化活动区块客户端ID let activeBlockClientId = null; const getActiveBlockData = () => { const activeBlock = select( blockEditorStore ).getSelectedBlock(); if ( activeBlock && activeBlock.clientId !== activeBlockClientId ) { activeBlockClientId = activeBlock.clientId; // 获取活动区块名称和属性 const activeBlockName = activeBlock.name; const activeBlockAttributes = activeBlock.attributes; // 输出活动区块名称和属性 console.log( activeBlockName, activeBlockAttributes ); } }; // 订阅编辑器变更 // wp.data.subscribe(() => { // getActiveBlockData() // }) // 点击时更新活动区块数据 // onclick="getActiveBlockData()" ``` **参数** - _state_ `Object`:全局应用状态。 **返回值** - `?Object`:选定的区块对象。 ### 是否处于多选状态 指示是否正处于多选过程中。该标志仅在通过鼠标移动进行多选时为真,多选完成后将变为假。 **相关项** - hasMultiSelection **参数** - _state_ `对象`: 全局应用状态。 **返回值** - `布尔值`: 若处于多选状态返回真,否则返回假。 ### 是否启用多选 选择器,返回多选功能是否启用。 **参数** - _state_ `对象`: 全局应用状态。 **返回值** - `布尔值`: 若允许多选块则返回真,若禁用多选则返回假。 ### 是否正在输入 若用户正在输入则返回真,否则返回假。 **参数** - _state_ `对象`: 全局应用状态。 **返回值** - `布尔值`: 用户是否正在输入。 ### 是否可解组 指示块是否可解组。若块为包含内部块的单一分组块,则该块可解组。若块具有“解组”转换,则即使不是默认分组块也可解组。此外,仅当块包含内部块且可被移除时才能解组。 **参数** - _state_ `对象`: 全局应用状态。 - _clientId_ `字符串`: 块的客户端ID。若未传递,则使用所选块的客户端ID。 **返回值** - `布尔值`: 若块可解组则返回真。 ### 是否为有效模板 返回块是否与模板匹配。 **参数** - _state_ `布尔值`: **返回值** - `?布尔值`: 模板是否有效。 ### 块是否刚被插入 判断指定clientId的块是否刚被插入。 **参数** - _state_ `对象`: 全局应用状态。 - _clientId_ `对象`: 块的客户端ID。 - _source_ `?字符串`: 块的可选插入来源。 **返回值** - `布尔值`: 若该块与指定来源最后插入的块匹配则返回真。 ## 操作 ### 清除选中块 清除块选择的操作。 **返回值** - `对象`: 操作对象。 ### 复制块 复制块列表的操作。 **参数** - _clientIds_ `字符串[]`: - _updateSelection_ `布尔值`: ### 进入格式化文本 > **已弃用** 返回用于指示光标已进入格式化文本的操作对象。 **返回值** - `对象`: 操作对象。 ### 退出格式化文本 > **已弃用** 返回用于指示用户光标已退出格式化文本的操作对象。 **返回值** - `对象`: 操作对象。 ### 闪烁块 通过律动高亮方式“闪烁”指定`clientId`块的操作。 **参数** - _clientId_ `字符串`: 目标块客户端ID。 - _timeout_ `数字`: 高亮持续时长(毫秒)。默认为150毫秒。 ### 隐藏插入点 隐藏插入点的操作。 ### 悬停块 > **已弃用** 返回用于指示指定客户端ID的块已被悬停的操作对象。 ### 在块后插入 在指定块后插入默认块的操作。 **参数** - _clientId_ `字符串`: ### 在块前插入 在指定块前插入默认块的操作。 **参数** - _clientId_ `字符串`: ### 插入块 插入单个块的操作,可选择在根块列表的特定索引位置插入。 仅允许插入已授权的块。若块未获授权或块列表上存在模板锁定,该操作可能会静默失败。 **参数** - _block_ `对象`: 要插入的块对象。 - _index_ `?数字`: 块应插入的索引位置。 - _rootClientId_ `?字符串`: 要插入的块列表的可选根客户端ID。 - _updateSelection_ `?布尔值`: 若为真则更新块选择状态。若为假则保持原选择状态。默认为真。 - _meta_ `?对象`: 要传递给操作对象的可选元数据值。 **返回值** - `对象`: 操作对象。 ### setBlockEditingMode 设置指定区块的编辑模式。 _相关_ - useBlockEditingMode _参数_ - _clientId_ `string`: 区块客户端ID,根容器使用 `''` - _mode_ `BlockEditingMode`: 区块编辑模式。可选值:`'disabled'`、`'contentOnly'` 或 `'default'` _返回值_ - `Object`: 操作对象 ### setBlockMovingClientId > **已弃用** 设置被移动区块的客户端ID。 _返回值_ - `Object`: 操作对象 ### setBlockVisibility 设置指定区块在画布上的可见性。 _参数_ - _updates_ `Record`: 包含各区块客户端ID及其新可见性设置的键值对 ### setHasControlledInnerBlocks 设置区块是否具有受控内部区块。 _参数_ - _clientId_ `string`: 区块客户端ID - _hasControlledInnerBlocks_ `boolean`: 若区块内部区块受控则为true ### setTemplateValidity 重置模板有效性状态。 _参数_ - _isValid_ `boolean`: 模板有效性标志 _返回值_ - `Object`: 操作对象 ### showInsertionPoint 显示插入点指示器。 _参数_ - _rootClientId_ `?string`: 可选,要插入区块列表的根客户端ID - _index_ `?number`: 区块插入位置的索引 - _\_\_unstableOptions_ `?Object`: 附加选项 _返回值_ - `Object`: 操作对象 _属性_ - _\_\_unstableWithInserter_ `boolean`: 是否显示插入器按钮 - _operation_ `WPDropOperation`: 应用时执行的操作,目前支持 'insert' 或 'replace' ### startDraggingBlocks 返回表示用户开始拖拽区块的操作对象。 _参数_ - _clientIds_ `string[]`: 被拖拽区块的客户端ID数组 _返回值_ - `Object`: 操作对象 ### startMultiSelect 启动区块多选模式。 _返回值_ - `Object`: 操作对象 ### startTyping 返回表示用户开始输入的操作对象。 _返回值_ - `Object`: 操作对象 ### stopDraggingBlocks 返回表示用户停止拖拽区块的操作对象。 _返回值_ - `Object`: 操作对象 ### stopMultiSelect 停止区块多选模式。 _返回值_ - `Object`: 操作对象 ### stopTyping 返回表示用户停止输入的操作对象。 _返回值_ - `Object`: 操作对象 ### synchronizeTemplate 将模板与区块列表进行同步。 _返回值_ - `Object`: 操作对象 ### toggleBlockHighlight 切换区块高亮状态。 _参数_ - _clientId_ `string`: 区块客户端ID - _isHighlighted_ `boolean`: 高亮状态 ### toggleBlockMode 在可视化模式与HTML模式之间切换区块编辑模式。 _参数_ - _clientId_ `string`: 区块客户端ID _返回值_ - `Object`: 操作对象 ### toggleSelection 启用或禁用区块选择功能。 _参数_ - _isSelectionEnabled_ `[boolean]`: 是否启用区块选择 _返回值_ - `Object`: 操作对象 ### unsetBlockEditingMode 清除指定区块的编辑模式设置。 _相关_ - useBlockEditingMode _参数_ - _clientId_ `string`: 区块客户端ID,根容器使用 `''` _返回值_ - `Object`: 操作对象 ### updateBlock 更新指定客户端ID的区块。 _参数_ - _clientId_ `string`: 区块客户端ID - _updates_ `Object`: 待合并的区块属性 _返回值_ - `Object`: 操作对象 ### updateBlockAttributes 更新多个指定区块的属性。 _参数_ - _clientIds_ `string|string[]`: 区块客户端ID(单个或数组) - _attributes_ `Object`: 待合并的区块属性。若 `options.uniqueByBlock` 为true,应按clientIds建立键值映射 - _options_ `Object`: 更新选项 - _options.uniqueByBlock_ `[boolean]`: clientIds数组中每个区块是否具有独立属性集 _返回值_ - `Object`: 操作对象 ```markdown ### getSelectedBlockClientId 返回当前选中区块的客户端ID,若无选中区块则返回null。 _参数_ - _state_ `Object`: 编辑器状态。 _返回值_ - `?string`: 选中区块的客户端ID。 ### getSelectedBlockClientIds 返回当前选中的区块客户端ID集合(多选或单选)。 _参数_ - _state_ `Object`: 编辑器状态。 _返回值_ - `Array`: 多选区块的客户端ID数组。 ### getSelectedBlockCount 返回当前文章中选中的区块数量。 _参数_ - _state_ `Object`: 全局应用状态。 _返回值_ - `number`: 文章中选中的区块数量。 ### getSelectedBlocksInitialCaretPosition 返回选中区块的初始光标位置。该位置用于在选中区块变更时正确定位光标。若当前区块非富文本区块,初始位置设为0表示"聚焦区块"。 _参数_ - _state_ `Object`: 全局应用状态。 _返回值_ - `0|-1|null`: 初始位置。 ### getSelectionEnd 返回当前选区结束位置的区块客户端ID、属性键和文本偏移量。 _参数_ - _state_ `Object`: 区块编辑器状态。 _返回值_ - `WPBlockSelection`: 选区结束信息。 ### getSelectionStart 返回当前选区开始位置的区块客户端ID、属性键和文本偏移量。 _参数_ - _state_ `Object`: 区块编辑器状态。 _返回值_ - `WPBlockSelection`: 选区开始信息。 ### getSettings 返回编辑器设置。 _参数_ - _state_ `Object`: 编辑器状态。 _返回值_ - `Object`: 编辑器设置对象。 ### getTemplate 返回已定义的区块模板。 _参数_ - _state_ `boolean`: 状态标识。 _返回值_ - `?Array`: 区块模板。 ### getTemplateLock 返回已定义的区块模板锁定状态。可选择传入根区块客户端ID作为上下文,默认为全局上下文。 _参数_ - _state_ `Object`: 编辑器状态。 - _rootClientId_ `?string`: 可选的根区块客户端ID。 _返回值_ - `string|false`: 区块模板锁定状态。 ### hasBlockMovingClientId > **已弃用** 返回是否启用区块移动模式。 ### hasDraggedInnerBlock 当区块的内部子块被拖拽时返回true。 _参数_ - _state_ `Object`: 编辑器状态。 - _clientId_ `string`: 区块客户端ID。 - _deep_ `boolean`: 是否执行深度检查。 _返回值_ - `boolean`: 该区块是否有内部子块被拖拽。 ### hasInserterItems 判断插入器中是否有可显示项。 _参数_ - _state_ `Object`: 编辑器状态。 - _rootClientId_ `?string`: 可选的区块列表根客户端ID。 _返回值_ - `boolean`: 插入器中是否显示项目。 ### hasMultiSelection 如果已进行多选操作则返回true,否则返回false。 _参数_ - _state_ `Object`: 编辑器状态。 _返回值_ - `boolean`: 是否已进行多选。 ### hasSelectedBlock 如果存在单个选中区块则返回true,否则返回false。 _参数_ - _state_ `Object`: 编辑器状态。 _返回值_ - `boolean`: 是否选中单个区块。 ### hasSelectedInnerBlock 当区块的内部子块被选中时返回true。 _参数_ - _state_ `Object`: 编辑器状态。 - _clientId_ `string`: 区块客户端ID。 - _deep_ `boolean`: 是否执行深度检查。 _返回值_ - `boolean`: 该区块是否有内部子块被选中。 ### isAncestorBeingDragged 返回该区块的父级/祖先级是否正在被拖拽。 _参数_ - _state_ `Object`: 全局应用状态。 - _clientId_ `string`: 待检查区块的客户端ID。 _返回值_ - `boolean`: 该区块的祖先级是否正在被拖拽。 ### isAncestorMultiSelected 如果该区块的祖先级被多选则返回true,否则返回false。 _参数_ - _state_ `Object`: 编辑器状态。 - _clientId_ `string`: 区块客户端ID。 _返回值_ - `boolean`: 该区块的祖先级是否处于多选集合中。 ``` ### getBlockParentsByBlockName(根据区块名称获取父级区块列表) 给定一个区块客户端ID和区块名称,返回其所有父级区块从顶至底的列表,并按指定名称进行筛选。例如,若传入 'core/group' 作为区块名称,则仅返回属于群组区块的父级。若传入 `[ 'core/group', 'core/cover']` 作为区块名称,则同时返回群组区块和封面区块的父级。 **参数** - _state_ `Object`:编辑器状态。 - _clientId_ `string`:需要查找根级客户端ID的区块。 - _blockName_ `string|string[]`:用于筛选的区块名称(可多选)。 - _ascending_ `boolean`:排序方式。设为 true 时按从底到顶排列,false 时按从顶到底排列。 **返回值** - `Array`:父级区块的客户端ID集合。 ### getBlockRootClientId(获取区块根级客户端ID) 根据区块客户端ID,返回该区块嵌套结构的根级区块。顶层区块返回空字符串,不存在的区块返回 null。 **参数** - _state_ `Object`:编辑器状态。 - _clientId_ `string`:需要查找根级客户端ID的区块。 **返回值** - `?string`:根级客户端ID(若存在)。 ### getBlocks(获取全部区块) 以数组形式返回当前编辑文章中的所有区块对象,排列顺序与文章中的显示顺序一致。注意:此操作将排除嵌套内部区块控制器中的子区块。 **参数** - _state_ `Object`:编辑器状态。 - _rootClientId_ `?string`:可选参数,指定区块列表的根级客户端ID。 **返回值** - `Object[]`:文章区块集合。 ### getBlocksByClientId(根据客户端ID获取区块) 根据区块客户端ID数组,返回对应的区块对象数组。 **参数** - _state_ `Object`:编辑器状态。 - _clientIds_ `string[]`:需要获取的区块客户端ID集合。 **返回值** - `WPBlock[]`:区块对象数组。 ### getBlocksByName(根据名称获取区块) 返回所有匹配指定区块名称的区块,搜索结果包含嵌套区块。 **参数** - _state_ `Object`:全局应用状态。 - _blockName_ `string[]`:需要获取的区块名称集合。 **返回值** - `Array`:符合名称条件的区块客户端ID数组。 ### getBlockSelectionEnd(获取区块选区终点) 返回当前区块选区的终点。该值可能为 null,可能表示单选区块终点或多选区块终点。当选区起点与终点一致时为单选状态。 **参数** - _state_ `Object`:全局应用状态。 **返回值** - `?string`:区块选区终点的客户端ID。 ### getBlockSelectionStart(获取区块选区起点) 返回当前区块选区的起点。该值可能为 null,可能表示单选区块起点或多选区块起点。当选区起点与终点一致时为单选状态。 **参数** - _state_ `Object`:全局应用状态。 **返回值** - `?string`:区块选区起点的客户端ID。 ### getBlockTransformItems(获取区块转换项列表) 确定可用区块转换列表中显示的条目。 每个条目对象包含在转换列表中显示菜单项和处理选择所需的内容。 “frecency”属性是结合了区块使用频率和近期使用情况的启发式指标()。 返回的条目按“frecency”值降序排列。 **参数** - _state_ `Object`:编辑器状态。 - _blocks_ `Object|Object[]`:单个区块对象或区块对象数组。 - _rootClientId_ `?string`:可选参数,指定区块列表的根级客户端ID。 **返回值** - `WPEditorTransformItem[]`:插入器中显示的转换项集合。 **类型定义** - _WPEditorTransformItem_ `Object` **属性说明** - _id_ `string`:条目的唯一标识符。 - _name_ `string`:需要创建的区块类型。 - _title_ `string`:插入器中显示的条目标题。 - _icon_ `string`:插入器中显示的Dashicon图标。 - _isDisabled_ `boolean`:是否禁止用户插入此条目。 - _frecency_ `number`:结合频率与近因度的启发式指标。 ### getClientIdsOfDescendants(获取后代区块的客户端ID) 返回一个数组,包含指定区块的所有后代区块的客户端ID。返回的ID首先按照给定ID的顺序排序,其次按照它们在编辑器中出现的顺序排序。 **参数** - _state_ `Object`:全局应用程序状态。 - _rootIds_ `string|string[]`:需要返回后代区块的客户端ID(单个或多个)。 **返回值** - `Array`:后代区块的客户端ID。 ### getClientIdsWithDescendants(获取包含后代的客户端ID) 返回一个数组,包含顶级区块及其任意深度的后代区块(适用于嵌套区块)的客户端ID。返回的ID顺序与它们在编辑器中出现的顺序一致。 **参数** - _state_ `Object`:全局应用程序状态。 **返回值** - `Array`:顶级区块及后代区块的ID。 ### getDirectInsertBlock(获取直接插入的区块) 返回由区块添加器直接插入的区块。 **参数** - _state_ `Object`:编辑器状态。 - _rootClientId_ `?string`:区块列表的可选根客户端ID。 **返回值** - `WPDirectInsertBlock|undefined`:要直接插入的区块类型。 **类型定义** - _WPDirectInsertBlock_ `Object` **属性** - _name_ `string`:区块的类型。 - _attributes_ `?Object`:传递给新创建区块的属性。 - _attributesToCopy_ `?Array`:插入时从相邻区块复制的属性。 ### getDraggedBlockClientIds(获取被拖动区块的客户端ID) 返回当前被直接拖动的区块的客户端ID。 此结果不包括被拖动父区块的子区块。 **参数** - _state_ `Object`:全局应用程序状态。 **返回值** - `string[]`:被拖动区块的客户端ID数组。 ### getFirstMultiSelectedBlockClientId(获取多选区块集合中的首个客户端ID) 返回多选区块集合中第一个区块的客户端ID,如果没有多选则返回null。 **参数** - _state_ `Object`:编辑器状态。 **返回值** - `?string`:多选区块集合中第一个区块的客户端ID。 ### getGlobalBlockCount(获取全局区块数量) 返回文章中的区块总数,或特定名称的区块总数。返回的数量包括嵌套区块。 **参数** - _state_ `Object`:全局应用程序状态。 - _blockName_ `?string`:可选的区块名称,如果指定,则仅统计该类型的区块。 **返回值** - `number`:文章中的区块数量,或与指定区块名称相同的区块数量。 ### getHoveredBlockClientId(获取悬停区块的客户端ID) > **已弃用** 返回当前悬停的区块。 ### getInserterItems(获取插入器项目) 确定插入器中显示的项目。包括静态项目(例如常规区块类型)和动态项目(例如可重用区块)。 每个项目对象包含在插入器中显示按钮并处理其选择所需的内容。 “frecency”属性是一种结合了区块使用频率和最近使用时间的启发式算法()。 项目按其“效用”和“frecency”降序排列返回。 **参数** - _state_ `Object`:编辑器状态。 - _rootClientId_ `?string`:区块列表的可选根客户端ID。 **返回值** - `WPEditorInserterItem[]`:插入器中显示的项目。 **类型定义** - _WPEditorInserterItem_ `Object` **属性** - _id_ `string`:项目的唯一标识符。 - _name_ `string`:要创建的区块类型。 - _initialAttributes_ `Object`:传递给新创建区块的属性。 - _title_ `string`:项目在插入器中显示的标题。 - _icon_ `string`:项目在插入器中显示的Dashicon图标。 - _category_ `string`:项目关联的区块分类。 - _keywords_ `string[]`:可搜索到此项目的关键词。 - _isDisabled_ `boolean`:是否阻止用户插入此项目。 - _frecency_ `number`:结合频率和最近使用时间的启发式值。 ### getLastMultiSelectedBlockClientId(获取多选区块集合中的最后一个客户端ID) 返回多选区块集合中最后一个区块的客户端ID,如果没有多选则返回null。 **参数** - _state_ `Object`:编辑器状态。 **返回值** - `?string`:多选区块集合中最后一个区块的客户端ID。 ### isBlockBeingDragged(是否正在拖拽区块) 返回该区块是否正在被拖拽。 仅当区块被直接拖拽时返回 true,若区块作为被拖拽父级的子级则不会返回 true。关于子区块请参阅 `isAncestorBeingDragged`。 **参数** - _state_ `Object`:全局应用状态。 - _clientId_ `string`:需检查区块的客户端 ID。 **返回值** - `boolean`:区块是否正在被拖拽。 ### isBlockHighlighted(区块是否高亮) 若当前高亮区块与指定区块客户端 ID 匹配则返回 true。 **参数** - _state_ `Object`:全局应用状态。 - _clientId_ `string`:需检查的区块。 **返回值** - `boolean`:区块当前是否处于高亮状态。 ### isBlockInsertionPointVisible(区块插入点是否可见) 返回区块插入点是否可见。 **参数** - _state_ `Object`:全局应用状态。 **返回值** - `?boolean`:插入点是否可见。 ### isBlockMultiSelected(区块是否被多选) 若指定客户端 ID 的区块处于多选范围内则返回 true,否则返回 false。 **参数** - _state_ `Object`:编辑器状态。 - _clientId_ `string`:区块客户端 ID。 **返回值** - `boolean`:区块是否处于多选集合中。 ### isBlockSelected(区块是否被选中) 若指定客户端 ID 的区块当前被选中且未开启多选则返回 true,否则返回 false。 **参数** - _state_ `Object`:编辑器状态。 - _clientId_ `string`:区块客户端 ID。 **返回值** - `boolean`:区块是否被选中且存在多选状态。 ### isBlockValid(区块是否有效) 返回区块是否有效。 **参数** - _state_ `Object`:编辑器状态。 - _clientId_ `string`:区块客户端 ID。 **返回值** - `boolean`:是否有效。 ### isBlockVisible(区块是否可见) 判断区块在画布上是否可见。 **参数** - _state_ `Object`:全局应用状态。 - _clientId_ `Object`:区块的客户端 ID。 **返回值** - `boolean`:区块可见时返回 true。 ### isBlockWithinSelection(区块是否位于选中范围内) 若指定客户端 ID 的区块当前被选中但不是已选区块中的最后一个则返回 true。此处的“最后”指文档中的区块顺序,*而非*多选顺序(因此不使用 `state.selectionEnd`)。 **参数** - _state_ `Object`:编辑器状态。 - _clientId_ `string`:区块客户端 ID。 **返回值** - `boolean`:区块是否被选中且非选中序列末位。 ### isCaretWithinFormattedText(光标是否位于格式化文本内) > **已弃用** 若光标位于格式化文本内则返回 true,否则返回 false。 **返回值** - `boolean`:光标是否位于格式化文本内。 ### isDraggingBlocks(是否正在拖拽区块) 若用户正在拖拽区块则返回 true,否则返回 false。 **参数** - _state_ `Object`:全局应用状态。 **返回值** - `boolean`:用户是否正在拖拽区块。 ### isFirstMultiSelectedBlock(是否为首个多选区块) 若存在多选且指定客户端 ID 的区块为多选集合中的首个区块则返回 true,否则返回 false。 **参数** - _state_ `Object`:编辑器状态。 - _clientId_ `string`:区块客户端 ID。 **返回值** - `boolean`:该区块是否为多选首项。 ### isGroupable(是否可成组) 判断指定客户端 ID 的区块是否可成组。需满足至少存在一个区块、已设置分组区块名称且可移除这些区块的条件。 **参数** - _state_ `Object`:全局应用状态。 - _clientIds_ `string[]`:区块客户端 ID 数组。若未传递则使用当前选中区块的客户端 ID。 **返回值** - `boolean`:区块可成组时返回 true。 ### isLastBlockChangePersistent(末次区块变更是否持久化) 若最近一次区块变更被认定为持久化变更则返回 true,否则返回 false。持久化变更指通过 BlockEditorProvider 的 `onChange` 回调(及 `onInput`)提交的变更。 **参数** - _state_ `Object`:区块编辑器状态。 **返回值** - `boolean`:最近一次区块变更是否具有持久性。 ### getBlockAttributes 根据区块的客户端ID返回其属性,如果不存在对应客户端ID的区块则返回 null。 **参数** - _state_ `Object`: 编辑器状态。 - _clientId_ `string`: 区块客户端ID。 **返回值** - `?Object`: 区块属性。 ### getBlockCount 返回当前文章中的区块总数。 **参数** - _state_ `Object`: 编辑器状态。 - _rootClientId_ `?string`: 可选的区块列表根客户端ID。 **返回值** - `number`: 文章中的区块数量。 ### getBlockEditingMode 返回指定区块的编辑模式。 编辑模式包含三种选项: - `'disabled'`: 完全禁止编辑区块,即不可被选中。 - `'contentOnly'`: 隐藏所有非内容界面元素,例如工具栏辅助控件、区块移动器、区块设置。 - `'default'`: 正常编辑区块。 区块可通过 `useBlockEditingMode` 钩子设置模式。 该模式会被所有内部区块继承,除非这些内部区块已设置自有模式。 模板锁定也可设置模式。若模板锁定为 `'contentOnly'`,且区块具有内容角色属性,则其模式会被覆盖为 `'contentOnly'`,否则设为 `'disabled'`。 **关联项** - useBlockEditingMode **参数** - _state_ `Object`: 全局应用状态。 - _clientId_ `string`: 区块客户端ID,根容器使用 `''`。 **返回值** - `BlockEditingMode`: 区块编辑模式。值为 `'disabled'`、`'contentOnly'` 或 `'default'`。 ### getBlockHierarchyRootClientId 根据区块客户端ID,返回该区块嵌套层级的根节点,根层级区块返回自身ID。 **参数** - _state_ `Object`: 编辑器状态。 - _clientId_ `string`: 要查找根客户端ID的区块。 **返回值** - `string`: 根客户端ID。 ### getBlockIndex 返回指定客户端ID的区块在区块顺序中的索引,若区块不存在则返回 `-1`。 **参数** - _state_ `Object`: 编辑器状态。 - _clientId_ `string`: 区块客户端ID。 **返回值** - `number`: 区块在顺序中的索引位置。 ### getBlockInsertionPoint 返回插入提示位置,默认为最末索引。 **参数** - _state_ `Object`: 编辑器状态。 **返回值** - `Object`: 包含 `rootClientId` 和 `index` 的插入点对象。 ### getBlockListSettings 返回区块的区块列表设置(如果存在)。 **参数** - _state_ `Object`: 编辑器状态。 - _clientId_ `?string`: 区块客户端ID。 **返回值** - `?Object`: 已设置的区块配置。 ### getBlockMode 返回区块的编辑模式,未显式设置时默认为"visual"模式。 **参数** - _state_ `Object`: 编辑器状态。 - _clientId_ `string`: 区块客户端ID。 **返回值** - `Object`: 区块编辑模式。 ### getBlockName 根据区块客户端ID返回其名称,如果不存在对应客户端ID的区块则返回 null。 **参数** - _state_ `Object`: 编辑器状态。 - _clientId_ `string`: 区块客户端ID。 **返回值** - `string`: 区块名称。 ### getBlockNamesByClientId 根据区块客户端ID数组返回对应的区块名称数组。 **参数** - _state_ `Object`: 编辑器状态。 - _clientIds_ `string[]`: 需要获取名称的客户端ID数组。 **返回值** - `string[]`: 区块名称数组。 ### getBlockOrder 返回编辑器中按出现顺序排列的所有区块客户端ID数组。可接受区块列表的根客户端ID参数,默认为顶层区块顺序。 **参数** - _state_ `Object`: 编辑器状态。 - _rootClientId_ `?string`: 可选的区块列表根客户端ID。 **返回值** - `Array`: 编辑器区块的有序客户端ID数组。 ### getBlockParents 根据区块客户端ID返回其所有父级区块的列表(从上至下)。 **参数** - _state_ `Object`: 编辑器状态。 - _clientId_ `string`: 要查找父级层级的区块。 - _ascending_ `boolean`: 按从底到顶(true)或从上到下(false)排序结果。 **返回值** - `Array`: 父级区块的客户端ID数组。 # 区块编辑器的数据 命名空间:`core/block-editor` ## 选择器 ### areInnerBlocksControlled 检查指定区块是否具有受控内部区块。 _参数_ - _state_ `Object`: 全局应用状态 - _clientId_ `string`: 要检查的区块 _返回值_ - `boolean`: 如果区块具有受控内部区块则返回 true ### canEditBlock 判断指定区块是否允许被编辑。 _参数_ - _state_ `Object`: 编辑器状态 - _clientId_ `string`: 区块客户端 ID _返回值_ - `boolean`: 指定区块是否允许被编辑 ### canInsertBlocks 判断指定区块是否允许插入到区块列表中。 _参数_ - _state_ `Object`: 编辑器状态 - _clientIds_ `string[]`: 要插入的区块客户端 ID 数组 - _rootClientId_ `?string`: 区块列表的可选根客户端 ID _返回值_ - `boolean`: 指定区块是否允许被插入 ### canInsertBlockType 判断指定区块类型是否允许插入到区块列表中。 _参数_ - _state_ `Object`: 编辑器状态 - _blockName_ `string`: 区块类型名称,例如 'core/paragraph' - _rootClientId_ `?string`: 区块列表的可选根客户端 ID _返回值_ - `boolean`: 指定区块类型是否允许被插入 ### canLockBlockType 判断指定区块类型是否可由用户锁定/解锁。 _参数_ - _state_ `Object`: 编辑器状态 - _nameOrType_ `(string|Object)`: 区块名称或类型对象 _返回值_ - `boolean`: 指定区块类型是否可被锁定/解锁 ### canMoveBlock 判断指定区块是否允许被移动。 _参数_ - _state_ `Object`: 编辑器状态 - _clientId_ `string`: 区块客户端 ID _返回值_ - `boolean`: 指定区块是否允许被移动 ### canMoveBlocks 判断指定区块是否允许被移动。 _参数_ - _state_ `Object`: 编辑器状态 - _clientIds_ `string`: 要移动的区块客户端 ID _返回值_ - `boolean`: 指定区块是否允许被移动 ### canRemoveBlock 判断指定区块是否允许被删除。 _参数_ - _state_ `Object`: 编辑器状态 - _clientId_ `string`: 区块客户端 ID _返回值_ - `boolean`: 指定区块是否允许被移除 ### canRemoveBlocks 判断指定区块是否允许被移除。 _参数_ - _state_ `Object`: 编辑器状态 - _clientIds_ `string`: 要移除的区块客户端 ID _返回值_ - `boolean`: 指定区块是否允许被移除 ### didAutomaticChange 如果最后一次更改是自动更改则返回 true,否则返回 false。 _参数_ - _state_ `Object`: 全局应用状态 _返回值_ - `boolean`: 最后一次更改是否为自动更改 ### getAdjacentBlockClientId 返回在给定参考 startClientId 和方向修饰符下的相邻区块客户端 ID。默认 startClientId 为所选区块,方向为下一个区块。如果没有相邻区块则返回 null。 _参数_ - _state_ `Object`: 编辑器状态 - _startClientId_ `?string`: 搜索起始区块的可选客户端 ID - _modifier_ `?number`: 方向性乘数(1 下一个,-1 上一个) _返回值_ - `?string`: 返回区块的客户端 ID,如果不存在则返回 null ### getAllowedBlocks 返回内部区块子级允许的插入器区块列表。 _参数_ - _state_ `Object`: 编辑器状态 - _rootClientId_ `?string`: 区块列表的可选根客户端 ID _返回值_ - `Array?`: 允许的区块类型列表 ### getBlock 根据客户端 ID 返回区块。这是区块的解析副本,包含其 `blockName`、`clientId` 和当前 `attributes` 状态。这不是区块的注册设置,必须从区块模块注册存储中检索。 getBlock 会递归遍历其内部区块,直到检索到所有子区块。请注意,getBlock 不会返回内部区块控制器的子内部区块。这是因为内部区块控制器会与其实体自行同步,因此不应包含在不同实体的区块中。例如,假设您调用 `getBlocks(TP)` 来获取模板部件的区块。如果另一个模板部件是 TP 的子级,则嵌套模板部件的子区块将不会被返回。这样,模板区块本身被视为父级的一部分,但其子级不是。 _参数_ - _state_ `Object`: 编辑器状态 - _clientId_ `string`: 区块客户端 ID _返回值_ - `Object`: 解析后的区块对象 ```markdown ### insertBlocks 在指定根区块列表中插入区块数组的操作,可选择在特定索引位置插入。 仅允许插入合规的区块。对于未授权的区块或当区块列表处于模板锁定状态时,该操作可能会静默失败。 _参数_ - _blocks_ `Object[]`: 待插入的区块对象数组 - _index_ `?number`: 区块插入的索引位置 - _rootClientId_ `?string`: 可选的目标区块列表根客户端ID - _updateSelection_ `?boolean`: 为true时更新区块选择状态,为false时保持原选择状态。默认为true - _initialPosition_ `0|-1|null`: 初始聚焦位置。设为null可阻止聚焦已插入区块 - _meta_ `?Object`: 可选元数据,将传递至操作对象 _返回值_ - `Object`: 操作对象 ### insertDefaultBlock 向区块列表添加默认类型新区块的操作 _参数_ - _attributes_ `?Object`: 可选的要分配的区块属性 - _rootClientId_ `?string`: 可选的目标区块列表根客户端ID - _index_ `?number`: 可选的要插入默认区块的索引位置 ### mergeBlocks 合并两个区块的操作 _参数_ - _firstBlockClientId_ `string`: 要合并的第一个区块客户端ID - _secondBlockClientId_ `string`: 要合并的第二个区块客户端ID ### moveBlocksDown 未记录的声明 ### moveBlocksToPosition 将指定区块移动到新位置的操作 _参数_ - _clientIds_ `?string`: 区块的客户端ID - _fromRootClientId_ `?string`: 源根客户端ID - _toRootClientId_ `?string`: 目标根客户端ID - _index_ `number`: 要移动到的目标索引 ### moveBlocksUp 未记录的声明 ### moveBlockToPosition 将指定区块移动到新位置的操作 _参数_ - _clientId_ `?string`: 区块的客户端ID - _fromRootClientId_ `?string`: 源根客户端ID - _toRootClientId_ `?string`: 目标根客户端ID - _index_ `number`: 要移动到的目标索引 ### multiSelect 更改区块多选状态的操作 _参数_ - _start_ `string`: 多选的起始区块 - _end_ `string`: 多选的结束区块 - _\_\_experimentalInitialPosition_ `number|null`: 可选的初始位置。传入null可跳过编辑器画布内的聚焦 ### receiveBlocks > **已弃用** 返回用于通知已接收区块的操作对象。与resetBlocks不同,这些区块应追加到现有已知集合,而非替换。 _参数_ - _blocks_ `Object[]`: 区块对象数组 _返回值_ - `Object`: 操作对象 ### registerInserterMediaCategory 注册新的插入器媒体分类。注册后,该媒体分类将在插入器的媒体标签页中可用。 使用的接口如下: _类型定义_ - _InserterMediaRequest_ `Object`: 插入器媒体请求接口 _属性_ - _per_page_ `number`: 每页获取的项目数量 - _search_ `string`: 用于筛选结果的搜索词 _类型定义_ - _InserterMediaItem_ `Object`: 插入器媒体响应接口。任何媒体资源都应将其响应映射到此接口,以创建核心WordPress媒体区块(图像、视频、音频) _属性_ - _title_ `string`: 媒体项标题 - _url_ \`string: 媒体项源URL - _previewUrl_ `[string]`: 在媒体列表中显示的预览图URL - _id_ `[number]`: 媒体项的WordPress ID - _sourceId_ `[number|string]`: 外部来源的媒体项ID - _alt_ `[string]`: 媒体项替代文本 - _caption_ `[string]`: 媒体项说明文字 _使用示例_ ```js wp.data.dispatch( 'core/block-editor' ).registerInserterMediaCategory( { name: 'openverse', labels: { name: 'Openverse', search_items: '搜索Openverse', }, mediaType: 'image', async fetch( query = {} ) { const defaultArgs = { mature: false, excluded_source: 'flickr,inaturalist,wikimedia', license: 'pdm,cc0', }; const finalQuery = { ...query, ...defaultArgs }; // 有时需要根据`InserterMediaRequest`接口映射支持的请求参数 // 此示例中`search`查询参数命名为`q` const mapFromInserterMediaRequest = { per_page: 'page_size', search: 'q', }; const url = new URL( 'https://api.openverse.org/v1/images/' ); Object.entries( finalQuery ).forEach( ( [ key, value ] ) => { const queryKey = mapFromInserterMediaRequest[ key ] || key; url.searchParams.set( queryKey, value ); } ); const response = await window.fetch( url, { headers: { 'User-Agent': 'WordPress/inserter-media-fetch', }, } ); const jsonResponse = await response.json(); const results = jsonResponse.results; return results.map( ( result ) => ( { ...result, // 如果响应结果包含需要后续访问的`id`属性,应将其映射到`InserterMediaItem`的`sourceId`属性 // 这在提供报告URL获取器时特别有用 // 同时应始终清除响应结果的`id`值,因为该值用于标识WordPress媒体项 sourceId: result.id, id: undefined, caption: result.caption, previewUrl: result.thumbnail, } ) ); }, getReportUrl: ( { sourceId } ) => `https://wordpress.org/openverse/image/${ sourceId }/report/`, isExternalResource: true, } ); ``` _参数_ - _category_ `InserterMediaCategory`: 要注册的插入器媒体分类 _类型定义_ - _InserterMediaCategory_ `Object`: 插入器媒体分类接口 _属性_ - _name_ `string`: 媒体分类名称,在所有媒体分类中应保持唯一 - _labels_ `Object`: 媒体分类标签 - _labels.name_ `string`: 媒体分类通用名称,用于插入器媒体项目列表 - _labels.search_items_ `[string]`: 搜索项目标签,默认为‘搜索文章’/‘搜索页面’ - _mediaType_ `('image'|'audio'|'video')`: 媒体分类的媒体类型 - _fetch_ `(InserterMediaRequest) => Promise`: 获取该分类媒体项目的函数 - _getReportUrl_ `[(InserterMediaItem) => string]`: 如果媒体分类支持举报媒体项,此函数应返回媒体项的举报URL,接收`InserterMediaItem`作为参数 - _isExternalResource_ `[boolean]`: 如果媒体分类属于外部资源,应设为true。这用于避免在用户操作时向外部资源发起请求 ```