
WordPress 块绑定与模式覆盖上手指南【免费下载链接】wordpress-developWordPress Develop, Git-ified. Synced from git://develop.git.wordpress.org/, including branches and tags! This repository is just a mirror of the WordPress subversion repository. Please include a link to a pre-existing ticket on https://core.trac.wordpress.org/ with every pull request.项目地址: https://gitcode.com/GitHub_Trending/wo/wordpress-develop当你在后台改完一句文案模板里的段落却始终不动多半是它没接上块绑定。块绑定把静态块属性接到动态数据源模式覆盖则是其中最常用的一条链路。这套页面由主题里的模式拼成块绑定让你不改布局就替换其中的文字与图片。它到底解决了什么问题块绑定干的事不复杂把块里写死的值换成运行时从别处取到的值。就像墙上的钟表盘是固定的指针却跟着电池里的信号走。你不用每次手动改数据一变页面自己就更新。这意味着你可以让同一份模板在不同文章、不同分类里自动呈现不同内容。块绑定内部是怎么跑起来的 注册给数据源一个门牌号新数据源靠 src/wp-includes/block-bindings.php 里的register_block_bindings_source()登记。它把名字、label、取数回调交给单例 registry 保管。命名有硬规则必须小写、带命名空间前缀形如my-plugin/my-source且要挂在init钩子上调用。这意味着你可以给任意字段造一个数据源核心只认门牌号认得着就能被块引用。 取值回调按钥匙取数每个源都是一个回调渲染时按钥匙取数。看内置的模式覆盖源function _block_bindings_pattern_overrides_get_value( $source_args, $block_instance, $attribute_name ) { if ( empty( $block_instance-attributes[metadata][name] ) ) { return null; } $metadata_name $block_instance-attributes[metadata][name]; return _wp_array_get( $block_instance-context, array( pattern/overrides, $metadata_name, $attribute_name ), null ); }它没查数据库而是从当前块的 context 里按模式名 → 字段名两层取值取不到就返回null让块回退到原文本。逻辑在 pattern-overrides.php。这意味着你可以把取数写得很自由——查表、调接口都行只要最后吐出一个值。 替换渲染时改写 HTML块渲染走到 class-wp-block.php 的render()它会调process_block_bindings()遍历metadata.bindings逐个查源、补上源声明的 context、取回值。命中支持属性后再用replace_html()把渲染出的 HTML 改写成新值。若绑了__default的 pattern-overrides还会展开成所有支持属性。这意味着只有回调真正返回了值块才会被改写返回null就原样保留——这正是回退内容的来源。3步从0到1启用块绑定配置确认版本。核心块绑定 6.5 起默认启用要接core/post-data、core/term-data需升到 6.9。注册数据源。自定义源在init钩子里调register_block_bindings_source()登记内置源模式覆盖、post-meta、post-data、term-data无需手动注册见 src/wp-includes/block-bindings/。在块上写绑定。给目标属性的metadata.bindings指到某个源例如把段落文字接到自定义字段!-- wp:paragraph { metadata: { bindings: { content: { source: core/post-meta, args: { key: greeting } } } } } --把段落content绑到core/post-metaargs.key指向字段名。这意味着你不用写一行 JS改这处配置静态段落就接上了数据。模式覆盖与自定义字段两个真实场景模式覆盖一份模板多处措辞。输入是往 Patterncore/block块的content里写greeting的覆盖值配置是给模式内段落设metadata.name为greeting、并把content绑到core/pattern-overrides效果是前台显示你传入的文案换个位置传值就能整站换措辞。自定义字段同模板各显其文。输入是给文章加字段greeting、值填本周精选配置就是上一步那段绑定效果是同一模板里每篇文章自动显示各自字段值不必逐篇手改。新手常踩的坑与进阶技巧注册时机不对——别在文件加载或plugins_loaded里注册正确做法是挂init否则取不到值。post-meta 字段取不到——字段没开show_in_rest、或以下划线开头受保护都会返回null正确做法是注册 meta 时加show_in_rest、避开_前缀。属性不在白名单——段落只支持content绑到别的属性会被直接跳过正确做法是先用get_block_bindings_supported_attributes()核对或用block_bindings_supported_attributes过滤器扩展。想拦截输出——用block_bindings_source_value过滤器改写任意源的结果想给新块开支持用同名过滤器加白名单。下一步想接真实数据就去读 src/wp-includes/block-bindings/ 里的四个内置源。核心渲染逻辑在 src/wp-includes/class-wp-block.php 的render()与process_block_bindings()。想自建数据源照着 src/wp-includes/block-bindings.php 顶部的注释抄一份即可。【免费下载链接】wordpress-developWordPress Develop, Git-ified. Synced from git://develop.git.wordpress.org/, including branches and tags! This repository is just a mirror of the WordPress subversion repository. Please include a link to a pre-existing ticket on https://core.trac.wordpress.org/ with every pull request.项目地址: https://gitcode.com/GitHub_Trending/wo/wordpress-develop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考