🆕 Bricks 2.4 已发布:查询循环性能提升 40%,迁移教程同步更新 →

首页 / 中文教程 / 教程

Bricks 自定义动态数据标签入门:把自定义标签加进『选择动态数据』列表

教程:Bricks 自定义动态数据标签入门:把自定义标签加进『选择动态数据』列表——dynamic data 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。

Ray ChanRay Chan·2026-08-12·约 2 分钟
目录
  1. 1.背景:{echo:函数} 之外的更优做法
  2. 2.目标:注册 Parent link 标签
  3. 3.Step 1:官方钩子注册标签(补全实现)
  4. 4.Step 2:渲染逻辑
  5. 5.中文小结

⚠️ 原文为 BricksLabs Pro 付费教程(2023 年,当时靠复制主题内 providers.php 实现),代码锁定。本文用 Bricks 官方钩子补全实现并标注「补全实现」,比旧方案更省事、可升级。

背景:{echo:函数} 之外的更优做法

Bricks 里可以用 { echo:函数名 } 输出任意函数的返回值,甚至传参。但有两个不便:

  1. 团队协作时,成员记不住函数名,手写容易错。

  2. {echo:} 标签不会出现在“选择动态数据”(Select dynamic data)的列表里,编辑器里没法点选,只能靠记忆手打。

更舒服的做法是注册自己的动态数据标签:标签出现在动态数据选择器里,点选即用,参数在界面上填。原文以“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 动态数据体系里最有复用价值的能力之一。

延伸阅读

常见问题(FAQ)

自定义标签和 {echo:} 有什么区别? {echo:} 直接跑函数;注册成标签后能在动态数据面板里像内置标签一样点选,复用更方便。

前台不生效先查什么? 先确认标签在白名单/注册钩子里登记了,且函数返回字符串而不是直接 echo。

标签能带参数吗? 能,注册时定义参数、调用时传值,适合做可复用的计算字段。

输出要转义吗? 要,返回数据前做好转义,避免带出意料之外的 HTML。

Ray Chan

站长

Ray Chan

WordPress Developer & Bricks Specialist

WordPress developer with 10+ years of client builds. Switched to Bricks in 2023 — now builds fast WordPress sites and migrates legacy Elementor/Divi projects.

延伸阅读