⚠️ 原文为 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 长期维护的官方入口,功能等价且无升级风险。
相关阅读:
适用场景与常见误区
自定义动态标签适合:官方没给的字段(如父级链接、自定义计算值)、要复用的复杂 {echo:} 逻辑、团队统一的一套数据调用语法。误区:一是把所有逻辑塞进一个标签,越长越难维护,按功能拆多个更清晰;二是忘记在白名单注册,前台不生效还查不出原因;三是标签里直接 echo 没做转义,可能带出脏数据。标签是「给 Bricks 加新动词」,按需注册、命名清晰最关键。
中文小结
注册自定义动态数据标签的完整套路:bricks/dynamic_data/tags 过滤器声明 标签名 → label + render 回调,render 回调接收 ($tag, $post, $context, $name) 返回字符串,标签即可出现在动态数据选择器里并正常渲染。相比 {echo:函数},它的优势是编辑器可点选、参数结构化、语义清晰。凡是“需要把某个 PHP 计算结果暴露给模板”的场景——父级链接、兄弟文章链接、上/下篇文章、条件计数等——都值得做成自定义标签,这是 Bricks 动态数据体系里最有复用价值的能力之一。
延伸阅读
- 想要现成外贸独立站,从零搭出能收询盘的站?看 铲子铺 chanzipu 的外贸建站教程(同用 Bricks)
常见问题(FAQ)
自定义标签和 {echo:} 有什么区别? {echo:} 直接跑函数;注册成标签后能在动态数据面板里像内置标签一样点选,复用更方便。
前台不生效先查什么? 先确认标签在白名单/注册钩子里登记了,且函数返回字符串而不是直接 echo。
标签能带参数吗? 能,注册时定义参数、调用时传值,适合做可复用的计算字段。
输出要转义吗? 要,返回数据前做好转义,避免带出意料之外的 HTML。
- 相关阅读:Bricks Setup Guide
延伸阅读
Bricks 动态条件:仅当文章存在手动摘要(Excerpt)时才输出元素
教程:Bricks 动态条件:仅当文章存在手动摘要(Excerpt)时才输出元素——dynamic data 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks Query Loop 高亮当前文章:给循环项加 data-current 属性
教程:Bricks Query Loop 高亮当前文章:给循环项加 data-current 属性——query loop 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 按 ACF Gallery 图片数量做动态条件输出
教程:Bricks 按 ACF Gallery 图片数量做动态条件输出——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 查询循环输出 ACF 图片字段的 Alt、Caption、标题数据
教程:Bricks 查询循环输出 ACF 图片字段的 Alt、Caption、标题数据——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
