块属性提供有关块存储的数据的信息。例如,丰富的内容、图像URL列表、背景颜色或按钮标题。
一个块可以包含任意数量的属性,这些属性由属性
字段–一个对象,其中每个键是属性的名称,值是属性定义。
属性定义至少包含类型
或一个枚举
。可能还有其他字段。
例子:Attributes对象定义三个属性–网址
,标题
,以及大小
.
{网址:{type:'字符串',source:'属性',选择器:“img”,属性:'src',},标题:{type:'字符串',},大小:{枚举:[“大”,“小”],},}
解析块时,此定义将用于从块内容中提取数据。任何匹配的内容都可以通过属性
道具。
此解析过程可概括为:
- 从中提取值
来源
.
- 检查值与
类型
,或是其中之一枚举
值。
例子:中可用的属性编辑
和函数,使用上述属性定义。
函数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
.
例子:提取内容
来自块标记中的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“:”小图像“}]}
属性可以从帖子的元数据中获得,而不是从保存的帖子内容中的块表示中获得。为此,需要一个属性在元
键。
属性定义:
{作者:{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:'标题'}}