在模式简介,您学习了如何从WordPress管理界面创建模式。现在是学习如何将这些自定义模式直接添加到主题的时候了
本文将向您展示如何从主题中获取模式的块代码并将其注册到WordPress。它还将涵盖注销模式和注册/注销模式类别。
如果您不熟悉创建自定义模式,请花点时间研究模式简介向导,它将引导您完成整个过程。
您的模式可以是任何您喜欢的模式,但出于本文的目的,下面共享的代码将是一个核心Cover块,其中嵌套了一些块,遵循以下结构:
您可以尝试自己从编辑器中重新创建这个,特别是如果您刚刚习惯使用编辑器的话。以下是编辑器中的图案截图:
您也可以根据自己的喜好进行自定义,但建议您在第一次创建模式时保持相对简单。
下面是上述模式的块标记的外观(请阅读模式简介获取模式代码的更多信息):
<!-- wp:cover{“overlayColor”:“对比度”,“对齐”:“完整”}--><div class=“wp-block-cover alignfull”><span aria-hidden=“true”class=“wb-block-coor__background-has-contrast-background-color has-backgroud-dim-100 has-background-dim”></span><div class=“wp-block-cover__inner-container”><!--wp:group{“style”:{“space”:}“blockGap”:“2.5rem”}},“layout”:{“type”:“constrained”,“wideSize”:“%”,“contentSize”:“75%”}}--><div class=“wp-block-group”><!--wp:heading{“textAlign”:“center”}--><h2 class=“wp-block-heading has-text-align-center”>欢迎访问我的网站</h2><!-- /wp:标题--><!-- wp:段落{“align”:“center”}--><p class=“has-text-align-center”>这是我远离家乡的小家。在这里,你会了解我。我会分享我的爱好、爱好和更多。有时,我甚至会在博客上发表一些有趣的文章</p>(第页)<!-- /wp:段落--><!-- wp:buttons{“layout”:{“type”:“flex”,“justifyContent”:”center“}}--><div class=“wp-block-buttons”><!--wp:button{“className”:“is-style-outline”}--><div class=“wp-block-button is-style-outline”>查看我的热门帖子→︎</a> </div><!-- /wp:按钮--></div><!-- /wp:按钮--><!-- /wp:组--></div></div><!-- /wp:封面-->
在本文的剩余部分中,您将使用相同的模式,学习如何注册、注销和进一步自定义它。
最好将大多数模式包装在Group、Cover或其他容器块(即允许嵌套块的块)中。这使得主题用户更容易在编辑器中移动整个模式。您还可以将CSS类添加到此外部块,以应用于整个模式的任何自定义样式。
在WordPress中注册块模式有两种方法:
- 通过将包含块标记的文件放置到主题中的/patterns文件夹中。
- 通过手动调用
寄存器块模式()
功能。
最简单的路线是第一条。在接下来的部分中,您将学习如何同时完成这两项工作,但本手册将建议您使用/图案
文件夹,但在某些边缘情况下除外。
WordPress将识别放置在主题中的任何模式文件/图案
文件夹,它将自动为您注册它,前提是它具有有效的模式文件头。
一个文件头是PHP注释的代码,在文件顶部有键+值对列表。WordPress解析此信息以收集元数据。在这种情况下,元数据用于注册块模式。
对于模式文件头,可以设置以下键:
职务
:可以翻译的可读标题。
鼻塞
:一个命名的slug,它是您的模式所特有的形式名称空间/模式名称
.
类别
:模式所属类别的逗号分隔列表。
说明
:注册模式的详细描述。仅向屏幕阅读器显示。
视口宽度
:的宽度<iframe>
预览图案时的视口(以像素为单位)。
插入器
:是否在插入器中显示图案。默认为真的
.
关键词
:与模式相关的关键字的逗号分隔列表。用户在插入器中搜索时使用。
块类型
:以逗号分隔的块类型列表,用于关联模式(例如。,堆芯/顶盖
,核心/后内容
).
岗位类型
:以逗号分隔的帖子类型列表,用于限制模式(例如。,邮递
,第页
). 默认为所有帖子类型。
模板类型
:模式适用的模板类型的逗号分隔列表(例如。,家
,单一的
).
对于大多数模式,您至少应该添加Title、Slug和Categories字段。模式文件应如下所示:
<?php(电话)/***标题:英雄*Slug:主题lug/英雄*类别:特色*/?><!-- 此处显示模式代码。-->
现在,让我们将从上一节复制的代码添加到/模式/hero.php
主题中的文件:
<?php(电话)/***标题:英雄*Slug:主题lug/英雄*类别:特色*/?><!-- wp:cover{“overlayColor”:“对比度”,“对齐”:“完整”}--><div class=“wp-block-cover alignfull”><span aria-hidden=“true”class=“wb-block-coor__background-has-contrast-background-color has-backgroud-dim-100 has-background-dim”></span><div class=“wp-block-cover__inner-container”><!--wp:group{“style”:{“space”:}“blockGap”:“2.5rem”}},“layout”:{“type”:“constrained”,“wideSize”:“%”,“contentSize”:“75%”}}--><div class=“wp-block-group”><!--wp:heading{“textAlign”:“center”}--><h2 class=“wp-block-heading has-text-align-center”>欢迎访问我的网站</h2><!-- /wp:标题--><!-- wp:段落{“align”:“center”}--><p class=“has-text-align-center”>这是我远离家乡的小家。在这里,你会了解我。我会分享我的爱好、爱好和更多。有时,我甚至会在博客上发表一些有趣的文章</p>(第页)<!-- /wp:段落--><!-- wp:buttons{“layout”:{“type”:“flex”,“justifyContent”:”center“}}--><div class=“wp-block-buttons”><!--wp:button{“className”:“is-style-outline”}--><div class=“wp-block-button is-style-outline”>查看我的热门帖子→Ş</a> </div><!-- /wp:按钮--></div><!-- /wp:按钮--></div><!-- /wp:组--><!-- /wp:封面-->
现在,如果你在WordPress中添加或编辑一篇新文章,你应该会在插入器中看到你的模式。单击模式选项卡并选择作为特色的:
您还应该能够看到下面列出的模式外观>编辑器>图案在WordPress管理员中。
而不是使用/图案
文件夹来自动注册您的模式,您可以选择通过PHP手动注册它们。您可以混合和匹配这两种注册方法,但单个模式只能用一种方法注册。
要使用PHP注册块模式,必须使用寄存器块模式()
功能。其签名如下:
寄存器块模式(字符串$pattern_name,数组$pattern_properties):布尔
该函数接受两个参数并返回真的
或假
,具体取决于模式是否已成功注册:
$图案名称
:一个命名的slug,它是您的模式所特有的形式名称空间/模式名称
.
$pattern_properties($模式属性)
:
内容
:图案的块标记。
标题
:可以翻译的可读标题。
类别
:模式所属类别的数组。
描述
:注册模式的详细描述。仅向屏幕阅读器显示。
视图端口宽度
:的宽度<iframe>
预览图案时的视口(以像素为单位)。
插入器
:是否在插入器中显示图案。默认为真的
.
关键字
:与模式相关的关键字数组。用户在插入器中搜索时使用。
块类型
:要与图案关联的块类型数组。
帖子类型
:限制模式的帖子类型数组。默认为所有帖子类型。
来源
:注册模式的源。这应该设置为主题
因为这个图案来自一个主题。
模板类型
:模式适用的模板类型数组。
通过PHP注册模式时,应该在初始化
挂钩。现在尝试通过在中添加以下代码来注册您的自定义模式函数.php
(请确保将自定义标记添加到内容
属性):
add_action('init','themeslug_register_patterns');函数themeslug_register_patterns(){register_block_pattern('themeslug/hero',数组(“title”=>__(“Hero”,“themeslug”),“categories”=>数组(“featured”),“source”=>“theme”,“内容”=>“<!--此处显示块模式。-->') );}
如果您需要有条件地注册整个模式,那么有两种方法可供选择,具体取决于您喜欢如何注册模式。
在/patterns文件夹中有条件地注册模式
如果您使用了自动注册方法将图案放置在主题的/图案
文件夹,没有真正的方法可以有条件地注册它。在这种情况下,您必须取消注册该模式。
假设您只想使之前注册的英雄模式可用,如果核心/段落
块已注册。在实际场景中,您可能正在检查第三方块核心/段落
块仅用于此示例。
在您的函数.php
文件以注销您以前注册的模式:
add_action('init','themeslug_unregister_patterns',999);函数themeslug_unregister_patterms(){if(WP_Block_Type_Registry::get_instance()->is_registered('核心/段落')){unregister_block_pattern('themeslug/hero');}}
上述代码使用工作包块类型注册表
类,它存储服务器端使用WordPress注册的所有块类型。使用类的is_registered()
方法,您可以确定块是否已注册。
如果通过PHP手动注册模式,只需将调用包装到寄存器块模式()
用你的条件检查。
使用与上面相同的示例,如果核心/段落
块通过将其添加到函数.php
:
add_action('init','themeslug_register_patterns',999);函数themeslug_register_patterns(){if(WP_Block_Type_Registry::get_instance()->is_registered('核心/段落')){register_block_pattern('themeslug/hero',数组(“title”=>__(“Hero”,“themeslug”),“categories”=>数组(“featured”),“source”=>“theme”,“内容”=>“<!--此处显示块模式。-->') );}}
有时需要注销块模式,以便它们不会出现在用户的插入器中。例如,您可能想删除一些核心WordPress模式,那些由父主题添加的模式(如果您正在构建子主题),或者那些由第三方插件添加的模式。
当您需要注销单个块模式时,您将使用unregister_block_pattern()
功能:
unregister_block_pattern(字符串$pattern_name):bool
与注册模式时一样,您还需要在初始化
挂钩。因为模式通常(但并不总是)以默认优先级注册10
在初始化
,您将希望使用更高的优先级,以便稍后运行代码。
尝试通过将此代码添加到您的函数.php
文件:
add_action('init','themeslug_unregister_patterns',999);函数themeslug_unregister_patterms(){unregister_block_pattern('themeslug/hero');}
虽然您可以使用unregister_block_pattern()
要注销单个核心WordPress模式,您还可以通过删除对核心块模式功能的支持来删除所有模式。
要删除所有核心WordPress模式,请将此代码添加到主题函数.php
文件:
add_action('after_setup_theme','themeslug_remove_core_patterns');函数themeslug_remove_core_patterns(){remove_theme_support(“核心块模式”);}
WordPress还自动从官方远程加载一些模式图案目录在有些情况下,你可能不想加载这些模式,例如它们与你的主题设计不匹配。您可能还想选择不在为客户端构建的站点上调用远程API。无论是什么情况,您都可以通过筛选应加载远程块模式
挂钩。
要禁用远程模式,请将此代码添加到函数.php
文件:
添加过滤器(“should_load_remote_block_patterns”,“__return_false”);
WordPress有几个默认注册的块模式类别:
作为特色的
关于
音频
(添加到WordPress 6.4中)
横幅
按钮
行动要求
柱
接触
页脚
画廊
收割台
媒体
文件夹
帖子
查询
(使用帖子
相反)
服务
团队
证词
文本
视频
(添加到WordPress 6.4中)
通常,最好为主题使用这些默认类别。这将保持用户习惯的一致UI。但有时您可能希望添加自己的类别,甚至删除已注册的类别。
在本文的这一节中,您将学习如何注册和注销自定义块模式类别。
要注册用于将一个或多个模式放入的自定义类别,必须使用寄存器块模式类别()
功能:
register_block_pattern_category(寄存器块模式类别)register_block_pattern_category(寄存器块模式类别)字符串$category_name,数组$category_properties):布尔
该函数接受两个参数:
$类别名称
:类别的唯一ID/slug。最好在这个词前面加上你的主题slug(例如。,主题博客类别名称
).
$category_properties(类别_属性)
:用于定义有关类别的更多数据的属性数组:
标签
:可翻译类别的可读标签/标题。
描述
:可翻译类别的描述。
尝试为主题添加新的自定义图案类别。将此代码添加到主题函数.php
文件:
add_action('init','themeslug_register_pattern_categories');函数themeslug_register_pattern_categories(){register_block_pattern_category('themeslug/custom',数组('label'=>__('主题名称:自定义','themeslug'),“description”=>__(“Theme Name的自定义模式”,“themeslug”)) );}
现在尝试添加主题插件/自定义
类别到任何块图案:
<?php(电话)/***标题:英雄*Slug:主题lug/英雄*类别:特色、主题插件/自定义*/?><!-- 此处显示块标记。-->
该类别的任何注册图案现在都将出现在插入器和下面外观>编辑器>图案(外观>图案经典主题):
要注销已注册的模式类别,必须使用取消注册块模式类别()
功能:
unregister_block_pattern_category(字符串$category_name):bool
该函数接受单个参数:
$类别名称
:要注销的已注册类别的名称(即slug)。
尝试将此代码添加到您的函数.php
删除主题插件/自定义
您在上一步中注册的类别:
add_action('init','themeslug_unregister_pattern_categories');函数themeslug_unregister_pattern_categories(){注册表块模式类别('themeslug/custom');}