跳到主内容
新主题测试

WordPress 区块绑定(Block Bindings):不写自定义区块也能接动态数据

100%
WordPress 区块绑定(Block Bindings):不写自定义区块也能接动态数据

在 WordPress 6.5 之前,想让区块显示「自定义字段(post meta)」这类动态数据,十有八九得自己写个动态区块(Dynamic Block)。现在有了 Block Bindings API(区块绑定,6.5+),你可以把数据直接「绑」到核心区块的属性上,前端渲染时自动替换——免写自定义区块。

一、它解决什么痛点

很多站点的电影评分、发布日期、阅读量这类信息,本质就是几个 post meta 字段。过去为了显示它们,得专门造一个区块。Block Bindings 的思路是:核心区块(段落、标题、图片、按钮)已经够用了,只差把属性接到数据源。比如把「段落」的内容接到自定义字段,把「图片」的 url 接到外部 API 返回的随机图。

注意版本门槛:Block Bindings API 需要 WordPress 6.5 及以上;core/post-data 与 core/term-data 等数据源是后续版本(6.7/6.9)才加入的。生产环境先确认站点版本。

二、核心数据源(开箱即用)

WordPress 内置了几个绑定源,无需自己注册就能用:

  • core/post-meta:把区块属性绑到文章自定义字段(最常用);
  • core/post-data:文章数据,如发布日期、永久链接;
  • core/term-data:分类/标签等术语数据;
  • core/pattern-overrides:让同步图案(Synced Pattern)的局部内容可按实例覆盖。

三、绑定自定义字段到段落(最简实战)

先在主题的 functions.php 或插件里注册一个可暴露给 REST 的 post meta:

register_meta( 'post', 'my_custom_field', array(
    'show_in_rest' => true,
    'single'       => true,
    'type'         => 'string',
) );

然后在区块的 metadata.bindings 里把它接到段落的 content 属性:

{
  "metadata": {
    "bindings": {
      "content": {
        "source": "core/post-meta",
        "args": { "key": "my_custom_field" }
      }
    }
  }
}
受保护的字段为什么用不了
post meta 的键不能以「下划线」开头(如 _example_key 是受保护字段),且必须设 show_in_rest => true,否则 Block Bindings 读不到。这是常见踩坑点。

四、进阶:注册自定义绑定源

内置源不够用时,用 register_block_bindings_source() 在 init 钩子里注册自己的源。核心是一个 get_value_callback 回调,返回要填进区块属性的值:

add_action( 'init', function () {
    register_block_bindings_source( 'wpmovies/visualization-date', array(
        'label'              => '上映日期',
        'get_value_callback' => function ( $source_args, $block_instance ) {
            $post_id = $block_instance->context['postId'];
            return isset( $source_args['key'] )
                ? get_post_meta( $post_id, $source_args['key'], true )
                : '';
        },
        'uses_context' => array( 'postId' ),
    ) );
} );

返回值还能用 block_bindings_source_value 过滤器再加工,比如把原始日期格式化成「年/月/日」。

查看 Block Bindings 官方手册

常见问题


所有区块属性都能绑吗?
不是。目前仅部分核心区块的特定属性支持(如图片的 url/alt、段落/标题的 content、按钮的 url/text)。可用 block_bindings_supported_attributes_ 过滤器为自定义区块扩展。

和动态区块(Dynamic Block)比谁更好?
简单显示类需求用 Block Bindings 更轻;需要复杂渲染逻辑、交互的,仍应写动态区块。两者不互斥。

绑定的数据会被缓存吗?
绑定在区块渲染时求值,属于服务端动态输出,配合整页缓存时需确认缓存策略不会把动态值固化。

相关阅读

这篇有帮助吗?
云上的幻象
云上的幻象查看主页
1638文章4评论

相关文章

评论 (0)

发表回复

发表回复