属性

块属性提供有关块存储的数据的信息。例如,丰富的内容、图像URL列表、背景颜色或按钮标题。

一个块可以包含任意数量的属性,这些属性由属性字段–一个对象,其中每个键是属性的名称,值是属性定义。

属性定义至少包含类型或一个枚举。可能还有其他字段。

例子:Attributes对象定义三个属性–网址,标题,以及大小.

{网址:{type:'字符串',source:'属性',选择器:“img”,属性:'src',},标题:{type:'字符串',},大小:{枚举:[“大”,“小”],},}

解析块时,此定义将用于从块内容中提取数据。任何匹配的内容都可以通过属性道具。

此解析过程可概括为:

  1. 从中提取值来源.
  2. 检查值与类型,或是其中之一枚举值。

例子:中可用的属性编辑和函数,使用上述属性定义。

函数YourBlockEdit({attributes}){返回(<p>URL是{attributes.URL},标题是{attrabutes.title},大小是{atributes.size}</p>(第页))}

块负责使用节约函数以确保所有具有来源字段根据属性定义保存。这不是自动的。

不带来源将自动保存在块中注释分隔符.

例如,使用上述属性定义,您需要确保节约函数具有相应的img标记网址属性。这个标题大小属性将保存在注释分隔符中。

例子:示例节约包含网址属性

函数YourBlockSave({attributes}){返回(<img src={attributes.url}/>)}

保存的HTML将包含标题大小在注释分隔符中网址在中国际货币基金组织节点。

<!-- 区块:您的区块{“title”:“hello world”,“size”:“large”}--><img src=“/image.jpg”/><!-- /块:您的块-->

如果属性随时间变化,则块弃用可以帮助从旧属性迁移,或将其完全删除。

类型验证

这个类型指示属性存储的数据类型。它不指示数据存储的位置,该位置由来源字段。

A类类型是必需的,除非枚举提供了。A类类型可以与枚举.

这个类型字段必须是以下之一:

  • 无效的
  • 布尔值
  • 对象
  • 阵列
  • 一串
  • 整数
  • (与整数)

请注意对象由您的来源。有关示例,请参阅查询详情如下。

枚举验证

属性可以定义为一组固定值中的一个。这由枚举,其中包含允许值的数组:

例子:示例枚举.

{大小:{enum:['large','small','tiny']}}

价值来源

属性源用于定义如何从保存的帖子内容中提取属性值。它们提供了一种从保存的标记映射到块的JavaScript表示的机制。

可用的来源值为:
(无值)–当否时来源则数据存储在块的注释分隔符.
属性–数据存储在HTML元素属性中。
文本–数据存储在HTML文本中。
html格式–数据存储在HTML中。这通常由使用超文本.
查询–数据存储为对象数组。
–数据存储在post-meta中(已弃用)。

这个来源字段通常与选择器字段。如果未指定选择器参数,则源定义针对块的根节点运行。如果指定了选择器参数,它将针对块中的匹配元素运行。

这个选择器可以是HTML标记,也可以是任何可查询的查询选择器,例如类或id属性。下面给出了一些例子。

例如选择器属于国际货币基金组织将匹配国际货币基金组织元素,和img.类将匹配国际货币基金组织元素的类.

在幕后,属性源是马力(hpq),一个小库,用于将HTML标记解析和查询为对象形状。

总之来源确定数据存储在内容中的位置类型决定数据是什么。为了减少存储的数据量,通常最好在HTML中存储尽可能多的数据,而不是在注释分隔符中存储属性。

属性源

使用属性source从标记中的属性提取值。属性由属性字段,必须提供。

例子:提取型钢混凝土来自块标记中的图像的属性。

保存的内容:

<div>块内容<img src=“https://lorempixel.com/1200/800/" /></div>

属性定义:

{网址:{类型:“字符串”,source:'属性',选择器:'img',属性:'src',}}

块中可用的属性:

{“url”:“https://lorempixel.com/1200/800/" }

标记中的大多数属性都是类型一串。HTML中的数字属性仍存储为字符串,不会自动转换。

例子:提取宽度来自块标记中的图像的属性。

保存的内容:

<div>块内容<img src=“https://lorempixel.com/1200/800/“width=”50“/></div>

属性定义:

{宽度:{类型:“字符串”,source:'属性',选择器:'img',属性:'width',}}

块中可用的属性:

{“宽度”:“50”}

唯一的例外是检查属性是否存在(例如禁用属性按钮). 在这种情况下,请键入布尔值可以使用,并且存储的值将是布尔值。

例子:提取禁用属性。

保存的内容:

<div>块内容<button type=“button”disabled>按钮</div>

属性定义:

{禁用:{type:'布尔',source:'属性',选择器:'按钮',属性:'禁用',}}

块中可用的属性:

{“禁用”:true}

文本源

使用文本从标记中提取内部文本。请注意,HTML是根据的规则返回的text内容.

例子:提取内容来自块标记中的figcaption元素的属性。

保存的内容:

<图><img src=“/image.jpg”/>figcaption元素的内部文本</图>

属性定义:

{内容:{type:'字符串',source:'文本',选择器:“figcaption”,}}

块中可用的属性:

{“content”:“figcaption元素的内部文本”}

另一个示例,使用文本作为源,并使用。我的内容类作为选择器以提取文本:

例子:提取内容具有的元素的属性.my内容在块标记中找到的类。

保存的内容:

<div><img src=“/image.jpg”/>.my-content类的内部文本</p></div>

属性定义:

{内容:{type:'字符串',source:'文本',选择器:“.my-content”,}}

块中可用的属性:

{“content”:“.my-content类的内部文本”}

HTML源

使用html格式从标记中提取内部HTML。请注意,文本是根据以下规则返回的内部HTML.

例子:提取内容来自块标记中的figcaption元素的属性。

保存的内容:

<图><img src=“/image.jpg”/><figcaption>figcaption元素的内部文本</图>

属性定义:

{内容:{type:'字符串',源:'html',选择器:'图片标题',}}

块中可用的属性:

{“content”:“figcaption元素的内部文本”}

查询源

使用查询从标记中提取值数组。数组的条目由选择器参数,其中块中的每个匹配元素都有一个对应于第二个参数(属性源对象)的条目结构。

这个查询字段实际上是一个嵌套块属性定义。可以(尽管不一定推荐)进一步嵌套。

例子:提取型钢混凝土中高音来自块的标记中的每个图像元素。

保存的内容:

<div><img src=“https://lorempixel.com/1200/800/“alt=”大图像“/><img src=“https://lorempixel.com/50/50/“alt=”小图像“/></div>

属性定义:

{图像:{type:'数组',source:'查询',选择器:'img',查询:{网址:{type:'字符串',source:'属性',属性:'src',},alt(高度):{type:'字符串',source:'属性',属性:'alt',},}}}

块中可用的属性:

{“图像”:[{“url”:“https://lorempixel.com/1200/800/“,”alt“:”大图像“},{“url”:“https://lorempixel.com/50/50/“,”alt“:”小图像“}]}

元源(已弃用)

虽然属性可以从帖子的元中获得,但元属性源被视为已弃用;EntityProvider和相关挂钩API应改为使用,如创建元块操作方法.

属性可以从帖子的元数据中获得,而不是从保存的帖子内容中的块表示中获得。为此,需要一个属性在键。

属性定义:

{作者:{type:'字符串',source:'元',meta:“作者”},},

从这里,块可以使用与任何属性相同的接口读取和写入元属性:

编辑({attributes,setAttributes}){函数onChange(事件){setAttributes({author:event.target.value});}return<输入值={attributes.author}onChange={onChange}type=“text”/>;},

注意事项

默认情况下,元字段将从post对象的元中排除。可以通过显式显示字段来避免此问题:

函数gutenberg_my_block_init(){register_post_meta(“帖子”,“作者”,数组(“show_in_rest”=>真,) );}add_action('init','gutenberg_my_block_init');

此外,请注意WordPress默认为:

  • 不将元数据视为唯一的,而是返回一个值数组;
  • 将该数据视为字符串。

如果两种行为都不需要注册表_成本_元数据调用可以用单一的和/或类型参数如下:

函数gutenberg_my_block_init(){register_post_meta('post','author_count',数组(“show_in_rest”=>真,“single”=>真,“type”=>“integer”,) );}add_action('init','gutenberg_my_block_init');

如果要在属性中使用对象或数组,可以注册一串属性类型并使用JSON作为中介。在保存之前将结构化数据序列化为JSON,然后在服务器上反序列化JSON字符串。请记住,您对数据的完整性负责;确保正确清理、容纳丢失的数据等。

最后,确保在设置属性时尊重数据的类型,因为框架不会自动执行meta的类型转换。在块属性中键入错误将导致即使在保存后,帖子仍然是脏的(囊性纤维变性。 已编辑帖子脏,具有编辑的属性). 例如,如果authorCount(作者计数)是一个整数,请记住,事件处理程序可能传递不同类型的数据,因此应显式转换该值:

函数onChange(事件){props.setAttributes({authorCount:Number(event.target.value)});}

默认值

块属性可以包含默认值,如果类型来源与块内容中的任何内容都不匹配。

该值由违约字段,该值应与属性的预期格式匹配。

例子:示例违约值。

{type:'字符串',默认值:“hello world”}
{type:'数组',默认值:[{“url”:“https://lorempixel.com/1200/800/“,”alt“:”大图像“},{“url”:“https://lorempixel.com/50/50/“,”alt“:”小图像“}]}
{type:'对象',默认值:{宽度:100,title:'标题'}}