⚠️ 原文为 BricksLabs Pro 付费教程(2023 年,当时靠复制主题内 providers.php 实现),代码锁定。本文用 Bricks 官方钩子补全实现并标注「补全实现」,比旧方案更省事、可升级。
背景:{echo:函数} 之外的更优做法
Bricks 里可以用 { echo:函数名 } 输出任意函数的返回值,甚至传参。但有两个不便:
- 团队协作时,成员记不住函数名,手写容易错。
{echo:}标签不会出现在“选择动态数据”(Select dynamic data)的列表里,编辑器里没法点选,只能靠记忆手打。
更舒服的做法是注册自己的动态数据标签:标签出现在动态数据选择器里,点选即用,参数在界面上填。原文以“Parent link”标签为例——选中后,把当前文章/循环项的链接设为其父级文章/页面的链接,没有父级则设为 #。
目标:注册 Parent link 标签
期望效果:在动态数据选择器里出现 {parent_link} 选项;选中后输出当前文章父级的 URL(WordPress 层级页面/文章的 post_parent)。这是展示“官方动态数据标签注册机制”的绝佳入门案例——逻辑简单,但完整走一遍标签注册全流程。
Step 1:官方钩子注册标签(补全实现)
Bricks 官方钩子 bricks/dynamic_data/tags 注册标签,放入子主题 functions.php(去掉开头 <?php):
// 补全实现:注册 {parent_link} 动态数据标签,非原文代码
add_filter( 'bricks/dynamic_data/tags', function( $tags ) {
$tags['parent_link'] = [
'label' => 'Parent Link',
'render' => 'bl_render_parent_link',
];
return $tags;
} );
Step 2:渲染逻辑
// 补全实现:渲染 {parent_link} 标签值,非原文代码
function bl_render_parent_link( $tag, $post, $context, $name ) {
// 取当前文章的父级 ID(WordPress 层级文章才有)
$parent_id = wp_get_post_parent_id( $post->ID );
// 有父级:返回父级链接;没有:返回 #
return $parent_id ? get_permalink( $parent_id ) : '#';
}
使用场景举例:
- 子页面模板里加一个“返回上级”文本链接,动态数据选
{parent_link},URL 自动指向父页面。 - 产品类层级结构(分类页 → 产品组 → 产品)中,循环项链接统一指向父级。
- 循环外使用:
$post自动是当前页面对象,逻辑同样成立。
如果你想让标签接受参数(比如限制在某文章类型内),在 $tag['args'] 里读取冒号后的参数即可,渲染函数里做判断。
补充:原文 2023 年的实现方式是复制 /wp-content/themes/bricks/includes/integrations/dynamic-data/providers.php 到子主题再修改类名——那是当时没有官方钩子的临时方案,主题更新容易冲突,已不推荐。bricks/dynamic_data/tags 是 Bricks 长期维护的官方入口,功能等价且无升级风险。
中文小结
注册自定义动态数据标签的完整套路:bricks/dynamic_data/tags 过滤器声明 标签名 → label + render 回调,render 回调接收 ($tag, $post, $context, $name) 返回字符串,标签即可出现在动态数据选择器里并正常渲染。相比 {echo:函数},它的优势是编辑器可点选、参数结构化、语义清晰。凡是“需要把某个 PHP 计算结果暴露给模板”的场景——父级链接、兄弟文章链接、上/下篇文章、条件计数等——都值得做成自定义标签,这是 Bricks 动态数据体系里最有复用价值的能力之一。