区块模式是从区块插入器的“模式”选项卡中可用的预定义区块布局。一旦插入到内容中,这些区块即可用于添加或修改内容和配置。
区块模式
register_block_pattern
编辑器自带几个核心区块模式。主题和插件作者可以使用 register_block_pattern 辅助函数注册额外的自定义区块模式。
register_block_pattern 辅助函数接收两个参数。
– title:具有 namespace/title 命名约定的机器可读标题。
– properties:描述该模式的属性的数组。
区块模式可用的属性如下:
title(必需):模式的易读标题。content(必需):模式的区块 HTML 标记。description(可选):用于在插入器中描述模式的视觉隐藏文本。描述是可选的,但如果标题不能完全描述模式的功能,则强烈建议使用描述。描述将帮助用户在搜索时发现该模式。categories(可选):已注册的区块模式类别数组,用于对区块模式进行分组。区块模式可以显示在多个类别中。必须单独注册类别才能在此处使用。keywords(可选):帮助用户在搜索时发现模式的别名或关键字数组。viewportWidth(可选):指定模式预期宽度的整数,以便在插入器中对模式进行缩放预览。blockTypes(可选):模式预期与之一起使用的区块类型数组。每个值必须是声明的区块的name。postTypes(可选):模式限制与之一起使用的帖子类型数组。仅在编辑数组中传递的帖子类型之一时,该模式才可用。对于所有其他帖子类型,该模式完全不可用。templateTypes(可选):模式有意义的模板类型数组,例如404(如果模式是针对 404 页面),single-post(如果模式是用于显示单个帖子)。inserter(可选):默认情况下,所有模式都会出现在插入器中。要将模式隐藏以便仅通过编程方式插入,请将inserter设置为false。source(可选):表示模式来源的字符串。对于注册模式的插件,传递字符串plugin。对于主题,传递字符串theme。
以下代码示例注册了一个名为 my-plugin/my-awesome-pattern 的区块模式:
register_block_pattern(
'my-plugin/my-awesome-pattern',
array(
'title' => __( 'Two buttons', 'my-plugin' ),
'description' => _x( 'Two horizontal buttons, the left button is filled in, and the right button is outlined.', 'Block pattern description', 'my-plugin' ),
'content' => "<!-- wp:buttons {\"align\":\"center\"} -->\n<div class=\"wp-block-buttons aligncenter\"><!-- wp:button {\"backgroundColor\":\"very-dark-gray\",\"borderRadius\":0} -->\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link has-background has-very-dark-gray-background-color no-border-radius\">" . esc_html__( 'Button One', 'my-plugin' ) . "</a></div>\n<!-- /wp:button -->\n\n<!-- wp:button {\"textColor\":\"very-dark-gray\",\"borderRadius\":0,\"className\":\"is-style-outline\"} -->\n<div class=\"wp-block-button is-style-outline\"><a class=\"wp-block-button__link has-text-color has-very-dark-gray-color no-border-radius\">" . esc_html__( 'Button Two', 'my-plugin' ) . "</a></div>\n<!-- /wp:button --></div>\n<!-- /wp:buttons -->",
)
);
请注意,register_block_pattern() 应该从附加到 init 钩子的处理程序中调用。
function my_plugin_register_my_patterns() {
register_block_pattern( ... );
}
add_action( 'init', 'my_plugin_register_my_patterns' );
取消注册区块模式
unregister_block_pattern
unregister_block_pattern 辅助函数允许从主题或插件中取消注册先前注册的区块模式,并接收一个参数。
title:要取消注册的区块模式的名称。
以下代码示例取消注册了名为 my-plugin/my-awesome-pattern 的区块模式:
unregister_block_pattern( 'my-plugin/my-awesome-pattern' );
注意:
unregister_block_pattern() 应该从附加到 init 钩子的处理程序中调用。
function my_plugin_unregister_my_patterns() {
unregister_block_pattern( ... );
}
add_action( 'init', 'my_plugin_unregister_my_patterns' );
区块模式类别
可以使用类别对区块模式进行分组。区块编辑器自带捆绑的类别,您可以在自定义区块模式中使用它们。您还可以注册自己的区块模式类别。
register_block_pattern_category
register_block_pattern_category 辅助函数接收两个参数。
title:区块模式类别的机器可读标题。properties:描述该模式类别属性的数组。
模式类别的属性包括:
label(必需):模式类别的易读标签。
以下代码示例注册了名为 hero 的类别:
register_block_pattern_category(
'hero',
array( 'label' => __( 'Hero', 'my-plugin' ) )
);
注意:
register_block_pattern_category() 应该从附加到 init 钩子的处理程序中调用。
除非已分配模式给该类别,否则该类别不会显示在“模式”下。
function my_plugin_register_my_pattern_categories() {
register_block_pattern_category( ... );
}
add_action( 'init', 'my_plugin_register_my_pattern_categories' );
unregister_block_pattern_category
unregister_block_pattern_category 辅助函数允许从主题或插件中取消注册先前注册的区块模式类别,并接收一个参数。
title:要取消注册的区块模式类别的名称。
以下代码示例取消注册了名为 hero 的类别:
unregister_block_pattern_category( 'hero' );
注意:
unregister_block_pattern_category() 应该从附加到 init 钩子的处理程序中调用。
function my_plugin_unregister_my_pattern_categories() {
unregister_block_pattern_category( ... );
}
add_action( 'init', 'my_plugin_unregister_my_pattern_categories' );
与区块类型和模式转换相关的区块模式
可以将区块模式附加到一个或多个区块类型。这会将该区块模式添加为该区块类型的可用转换。
目前,这些转换仅适用于简单区块(没有内部区块的区块)。为了使模式被建议,所选的每个区块都必须存在于区块模式中。
例如:
register_block_pattern(
'my-plugin/powered-by-wordpress',
array(
'title' => __( 'Powered by WordPress', 'my-plugin' ),
'blockTypes' => array( 'core/paragraph' ),
'content' => '<!-- wp:paragraph {"backgroundColor":"black","textColor":"white"} -->
<p class="has-white-color has-black-background-color has-text-color has-background">Powered by WordPress</p>
<!-- /wp:paragraph -->',
)
);
上述代码注册了一个名为 my-plugin/powered-by-wordpress 的区块模式,并在段落区块的“转换菜单”中显示该模式。转换结果将保留段落的现有内容并应用其他属性——在本例中为背景和文本颜色。
如上所述,简单区块的模式转换也可以工作,如果我们选择了多个区块并且这些区块有匹配上下文模式。让我们看看一个附加了两个区块类型的模式的示例。
register_block_pattern(
'my-plugin/powered-by-wordpress',
array(
'title' => __( 'Powered by WordPress', 'my-plugin' ),
'blockTypes' => array( 'core/paragraph', 'core/heading' ),
'content' => '<!-- wp:group -->
<div class="wp-block-group">
<!-- wp:heading {"fontSize":"large"} -->
<h2 class="has-large-font-size"><span style="color:#ba0c49" class="has-inline-color">大家好</span></h2>
<!-- /wp:heading -->
<!-- wp:paragraph {"backgroundColor":"black","textColor":"white"} -->
<p class="has-white-color has-black-background-color has-text-color has-background">Powered by WordPress</p>
<!-- /wp:paragraph -->
</div><!-- /wp:group -->',
)
);
在上述示例中,如果我们选择两种块类型之一,即段落块或标题块,此模式将通过转换所选块的内容来建议,并且还会添加来自该模式的其余块。另一方面,如果我们多选一个段落块和一个标题块,这两个块都将被转换。
块还可以在其他地方使用这些上下文块模式。例如,当插入一个新的查询循环块时,用户将获得与该块关联的所有模式的列表。
语义块模式
在块主题中,您还可以将块模式标记为“页眉”或“页脚”模式(模板部分区域)。我们称之为“语义块模式”。这些模式在向用户显示插入或替换页眉或页脚模板部分时会出现。
示例:
<?php
register_block_pattern(
'my-plugin/my-header',
array(
'title' => __( '我的页眉', 'my-plugin' ),
'categories' => array( 'header' ),
// 将模式分配给“页眉”区域。
'blockTypes' => array( 'core/template-part/header' ),
'content' => '我的块模式的内容',
)
);