WordPress 块样式(Block Patterns)完全指南
WordPress 块样式是 5.4 版本引入的一项功能,本质上是一组预先配置好的区块组合。你可以把它理解成“区块模板”,用户只需点击一下,就能插入一个设计好的布局,比如英雄区(Hero Section)、轮播图、联系表单等等。对于主题开发者来说,块样式大地提升了工作效率,也让非技术用户能够更轻松地搭建复杂页面。本文将带你从零开始,掌握块样式的创建、注册、调用和移除,并穿插一些实战中的实用技巧。无论你是主题开发新手还是想进一步优化工作流,这篇指南都能为你提供清晰的思路。
什么是块样式?
块样式就是一组区块的集合,它们被提前组合好,并作为一个整体提供给用户使用。比如,一个“新闻简报订阅”区块可能包含一个标题、一段描述文字和一个输入框。用户不需要自己一步步搭建,直接插入即可。
块样式和模板部件(Template Parts)有些相似,但大的区别在于:块样式支持 PHP,这意味着你可以在其中使用动态数据、翻译函数,甚至根据条件判断是否显示某部分内容。
注意:用户也可以在后台的“外观 > 编辑器 > 样式”中自行创建和管理块样式,这对开发调试非常方便。
如何创建一个块样式?
直接的方式是在编辑器中先搭好布局,然后复制区块代码。
- 在文章编辑器中添加你需要的区块(比如封面、标题、按钮等),调整好样式。
- 点击工具栏的“选项”(三个点图标),选择“复制”。
- 系统会生成一段包含所有区块的 HTML 注释代码。
示例代码(简化版):
html
<!-- wp:cover {"overlayColor":"contrast","align":"full"} -->
<div class="wp-block-cover alignfull">
<div class="wp-block-cover__inner-container">
<!-- wp:heading {"textAlign":"center"} -->
<h2 class="has-text-align-center">欢迎来到我的网站</h2>
<!-- /wp:heading -->
<!-- wp:paragraph {"align":"center"} -->
<p class="has-text-align-center">这里是我的小天地,分享生活与思考。</p>
<!-- /wp:paragraph -->
</div>
</div>
<!-- /wp:cover -->
注意:建议将整个布局放在一个容器区块(如“组”或“封面”)内,这样用户拖动时更方便。
如何注册块样式?
注册块样式有两种方法:自动注册(推荐)和手动注册(PHP)。
方法一:使用 /patterns 文件夹(自动注册)
在你的主题根目录下创建 /patterns 文件夹,把每个样式放在单独的 PHP 文件中。文件头部需要包含注释信息,WordPress 会自动识别并注册。
示例文件 /patterns/hero.php:
php
<?php /** * Title: 英雄区 * Slug: mytheme/hero * Categories: featured * Description: 一个带背景图和按钮的英雄区域 */ ?> <!-- 你的区块代码 -->
文件头字段说明:
- Title:样式名称(可翻译)
- Slug:标识符,格式
主题名/样式名 - Categories:所属分类,用逗号分隔
- Description:描述信息(仅屏幕阅读器可见)
- Viewport Width:预览宽度(像素)
- Inserter:是否显示在插入器中(默认 true)
- Keywords:搜索关键词
- Block Types:关联的区块类型
- Post Types:限制在哪些文章类型中可用
- Template Types:适配的模板类型
注册后,你就能在编辑器的“样式”标签页中找到它。
方法二:使用 PHP 手动注册
如果你需要更灵活的控制,可以在 functions.php 中使用 register_block_pattern() 函数。
示例:
php
add_action('init', 'mytheme_register_patterns');
function mytheme_register_patterns() {
register_block_pattern('mytheme/hero', [
'title' => __('英雄区', 'mytheme'),
'categories' => ['featured'],
'source' => 'theme',
'content' => '<!-- 你的区块代码 -->'
]);
}
注意:两种方法可以混用,但同一个样式只能用一种方式注册,否则会冲突。
在模板中引用块样式
块样式不仅供用户手动插入,你还可以直接在主题模板(如 index.html 或 home.html)中引用。
引用方式非常简单:
html
<!-- wp:pattern {"slug":"mytheme/hero"} /-->
把它放在模板的合适位置,比如页眉和页脚之间:
html
<!-- wp:template-part {"slug":"header"} /-->
<!-- wp:pattern {"slug":"mytheme/hero"} /-->
<!-- wp:template-part {"slug":"footer"} /-->
这样,你的样式就会作为模板的一部分自动显示在前端。
如何移除块样式?
如果你不需要某些样式(比如来自核心或插件的),可以将其注销。
移除单个样式
php
add_action('init', 'mytheme_unregister_patterns', 999);
function mytheme_unregister_patterns() {
unregister_block_pattern('mytheme/hero');
}
移除所有核心样式
php
add_action('after_setup_theme', function() {
remove_theme_support('core-block-patterns');
});
禁用远程样式
WordPress 会从官方目录加载远程样式,你可以通过过滤器关闭:
php
add_filter('should_load_remote_block_patterns', '__return_false');
进阶技巧
1. 多语言支持
因为样式文件本质上是 PHP,你可以使用翻译函数:
php
<h2><?php esc_html_e('欢迎来到我的网站', 'mytheme'); ?></h2>
2. 使用主题资源
你可以动态引用主题中的图片:
html
<img src="<?php echo esc_url(get_theme_file_uri('assets/images/bg.jpg')); ?>" />
3. 条件加载区块
某些区块可能依赖三方插件,你可以先检查是否可用:
php
if (WP_Block_Type_Registry::get_instance()->is_registered('core/paragraph')) {
// 输出区块代码
}
如果区块未注册,系统会提示用户安装,不会导致网站崩溃。
4. 条件注册样式
如果你只想在特定条件下注册样式,可以在 register_block_pattern 外层加判断:
php
if (WP_Block_Type_Registry::get_instance()->is_registered('myplugin/block')) {
register_block_pattern(...);
}
管理样式分类
WordPress 自带了一些分类(如 featured、buttons、columns 等)。你也可以创建自己的分类,方便整理样式。
注册新分类
php
add_action('init', function() {
register_block_pattern_category('mytheme/custom', [
'label' => __('我的主题:自定义', 'mytheme'),
'description' => __('这是为主题定制的样式', 'mytheme')
]);
});
移除分类
php
add_action('init', function() {
unregister_block_pattern_category('mytheme/custom');
});
总结
块样式是 WordPress 主题开发中一项非常实用且灵活的功能。通过将常用的区块组合打包成样式,你不仅能让用户更地构建内容,还能在主题模板中直接引用,大大提升开发效率。
回顾本文的核心内容:
- 块样式是一组预先配置好的区块,支持 PHP,便于国际化和动态内容。
- 注册方式有两种:通过
/patterns文件夹(推荐)或 PHP 手动注册。 - 样式可以插入到内容中,也可以直接用在模板里。
- 移除不需要的样式(核心、远程或三方)同样简单。
- 掌握分类管理和条件注册,能让你的主题更加和健壮。
希望这份指南能帮助你更好地掌握 WordPress 块样式,并在实际项目中灵活运用。