WordPress编辑器,无论是Post还是Site Editor,都可以操作我们所称的实体记录。这些是表示帖子、页面、用户、术语、模板等的对象。它们是存储在数据库中并由编辑器操作的数据。每个编辑器可以同时获取、编辑和保存多个实体记录。
例如,在站点编辑器中打开页面时:
- 您可以编辑页面本身的属性(标题、内容等)
- 您可以编辑页面模板的属性(模板内容、设计等)
- 您可以编辑与模板一起使用的模板部件(页眉、页脚)的属性。
编辑器跟踪所有这些修改,并协调保存所有这些修改的记录。这发生在@文字新闻/核心数据
包裹。
为了能够编辑实体,您需要首先获取它并将其加载到核心数据
商店。例如,以下代码将ID为1的帖子加载到商店中。(实体是帖子,帖子1是实体记录)。
wp.data.select('core').getEntityRecord('postType','post',1);
实体加载后,您可以对其进行编辑。例如,以下代码将帖子的标题设置为“Hello World”。对于每个提取的实体记录岩心数据
商店跟踪以下信息:
- “持久化”记录:从后端提取记录时的最后一个状态。
- “编辑”列表:记录的一个或多个属性的未保存本地修改。
该包还公开了一组操作来操作获取的实体记录。
要编辑实体记录,可以调用编辑实体记录
,它将实体类型、实体ID和新实体记录作为参数。以下示例将ID为1的帖子的标题设置为“Hello World”。
wp.data.dispatch(“core”).editEntityRecord(“postType”,“post”,1,{title:“Hello World”});
编辑完实体记录后,可以保存它。下面的代码保存ID为1的帖子。
wp.data.dispatch('core').saveEditedEntityRecord('postType','post',1);
由于WordPress编辑器允许同时编辑多个实体记录核心数据
包跟踪在通用撤消/重做堆栈中获取和编辑的所有实体记录。撤消/重做堆栈中的每个步骤都包含一个“编辑”列表,在调用解开
或重做
行动。
为了能够正确执行撤消和重做操作,编辑列表中的每个修改都包含以下信息:
- 实体种类和名称:核心数据中的每个实体都由对标识(种类、名称)。这对应于修改实体的标识符。
- 实体记录ID:修改的记录的ID。
- 属性:修改的属性的名称。
- 发件人:属性的上一个值(需要应用撤消操作)。
- 收件人:属性的新值(应用重做操作所需)。
例如,假设用户编辑一篇文章的标题,然后修改文章的slug,然后修改与文章一起使用的可重用块的标题。以下信息存储在撤消/重做堆栈中:
[{kind:“postType”,名称:“post”,id:1,属性:“title”,发件人:“”,收件人:“Hello World”}]
[{kind:“postType”,name:“post”,id:1,property:“slug”,from:“Previous slug“,to:“This is the slug of the hello world post”}]
[{kind:“postType”,名称:“wp_block”,id:2,属性:“title”,从:“Reusable block”,到:“Awesome Reusable block”}]
存储还跟踪当前“撤消/重做”步骤的“指针”。默认情况下,指针始终指向堆栈中的最后一项。当用户执行撤消或重做操作时,将更新此指针。
撤销/重做核心行为还支持我们所称的“缓存修改”。这些修改不会立即存储在撤消/重做堆栈中。例如,当用户开始在文本字段中键入内容时,该字段的值会在存储中进行修改,但直到用户移动到下一个单词或几毫秒后,此修改才会存储在撤消/重做堆栈中。这样做是为了避免为用户键入的每个字符创建新的撤消/重做步骤。
缓存的更改被保存在undo/redo堆栈之外的修改“缓存”中,这些修改仅在我们显式调用undo/redo堆栈时存储在其中__unstableCreateUndoLevel
或者下一次修改不是缓存的修改。
默认情况下,所有调用编辑实体记录
被视为“非缓存”,除非已缓存
选项传递为true。例子:
wp.data.dispatch(“core”).editEntityRecord(“postType”,“post”,1,{title:“Hello World”},{isCached:true});