WordPress Block Bindings 与 Patterns:2026 年最佳实践
按照 WordPress 核心团队的设计意图使用 Block Bindings API 与 theme.json 模式——而不是把自己逼进死角。
Block Bindings API 在 WordPress 6.5 中首次登场,悄然成为多年来最重要的内容创作功能。到了 WordPress 6.8,它已经稳定、文档完整,并被所有现代主题支持——包括我们的。本文是我们当初做迁移时希望有人能告诉我们的内容。
块绑定到底解决了什么
一个 block binding 是块属性与数据源之间的契约。块本身保持通用——core/paragraph、core/image、core/heading——绑定让它的内容来自别处:文章 meta、自定义字段、设置面板、API。
过去的方法是手写 serverSide 渲染的自定义块。两者都脆弱。有了绑定,编辑器预览、前台与块模式转换器都会自动使用同一个数据源。
最小可用的绑定源
在你的插件或 functions.php 中:
add_action('init', function () {
register_block_bindings_source('themescorners/author-bio', [
'label' => __('作者简介', 'themescorners'),
'get_value_callback' => function ($args, $block) {
$userId = get_the_author_meta('ID');
return get_user_meta($userId, 'bio', true);
},
]);
});
在块模式或内容里:
<!-- wp:paragraph {"metadata":{"bindings":{"content":{"source":"themescorners/author-bio"}}}} -->
<p>占位简介</p>
<!-- /wp:paragraph -->
完毕。这个段落在前台渲染作者简介,在编辑器里也展示(且锁定编辑)。
最佳实践 #1——优先绑定,不要做自定义块
每次你想调 registerBlockType 之前,先问自己:能不能用一个带绑定的 core/group 替代?以我们的经验,这个问题能砍掉大约 70% 的自定义块。自定义代码更少、编辑器风险更小、模式兼容性更完整。
最佳实践 #2——把回调控制在 1ms 以内
get_value_callback 在每次渲染时按绑定执行一次。在 20 篇文章、每篇 3 个绑定的列表里,就是 60 次调用。如果每次都没缓存地调 get_post_meta(),单页就多了 60 条 SQL 查询。激进缓存:
'get_value_callback' => function ($args, $block) {
static $cache = [];
$postId = get_the_ID();
return $cache[$postId] ??= get_post_meta($postId, '_tc_price', true);
},
最佳实践 #3——用 theme.json 注册模式,而不是 PHP
到 2026 年,分发模式的规范方式是 theme.json 加 /patterns/*.php 文件。除非你确实需要动态逻辑,否则跳过 PHP 里的 register_block_pattern()。
// patterns/hero-with-cta.php
/**
* Title: Hero with CTA
* Slug: themescorners/hero-with-cta
* Categories: featured
* Block Types: core/post-content
*/
?>
<!-- wp:cover {"url":"..."} -->
...
<!-- /wp:cover -->
文件被自动注册、可翻译、并在插入器中可见。无需 PHP 钩子。
最佳实践 #4——给模式加版本
当你修改一个模式后,所有已插入该模式的页面仍保留旧的序列化区块标记。要干净地迁移,把模式当作数据库迁移对待:
- 用新 slug 发布新模式(
hero-v2)。 - 在
block.json里加migration,结构有变时把旧块名重映射过去。 - 准备好之后用
block_pattern_categories过滤器把旧 slug 从插入器隐藏。 - 旧模式文件至少保留一个大版本——还在引用它的页面如果你立刻删除,会悄无声息地丢失标记。
最佳实践 #5——给编辑器用的模式加 templateLock
如果一个模式代表固定布局(例如三栏特性区),在外层 group 上设置 "templateLock":"all"。编辑者可以改文字和图片,但不能破坏布局。能显著减少支持工单。
接下来
WordPress 6.9(目前 beta)加入了类型化绑定源——你的回调声明数据类型(string、image、url),编辑器自动用合适的输入控件。今天就用绑定的话,把源结构设计成迁移到 6.9 只需要在每个源里加一个键。字段是 "type",与 "label" 并列。
延伸阅读
- 我们的WordPress 主题安装指南——如果你刚开始用 WordPress。
- 我们的免费 vs Pro 主题解释了哪些主题已经自带可拓展的绑定源。