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

首页 / 中文教程 / 教程

Bricks 中输出 ACF Relationship 关联文章的数量

教程:Bricks 中输出 ACF Relationship 关联文章的数量——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。

Ray ChanRay Chan·2026-08-11·约 2 分钟
目录
  1. 1.场景:需要统计关联文章数
  2. 2.Step 1:注册统计函数
  3. 3.Step 2:白名单 + echo 动态数据
  4. 4.原理说明
  5. 5.小结

场景:需要统计关联文章数

很多 Bricks 站点的内容结构都依赖 ACF 的 Relationship 字段:比如「国家 → 城市」这种一对多的关系,一个国家文章通过 related_cities 字段关联了若干篇城市文章。此时你想在国家的卡片或详情页上输出「该国家下共有 N 个城市」这样的统计数字,直接用 Bricks 自带的动态数据是拿不到的——默认只能输出关联文章列表,不能输出数量。

这个免费教程提供一个自定义函数,在任何需要的地方输出关联文章的数量,还能在查询循环(Query Loop)里针对每一篇循环项动态计算。

Step 1:注册统计函数

把下面的代码加到子主题的 functions.php(不要带开头的 PHP 标签)或代码片段插件(如 Code Snippets)里:

/**
 * Get the count of related posts for the current post
 * or a specific post ID
 *
 * @param string $field_name The relationship field name slug.
 * @param int $post_id Optional. The ID of the post. Defaults to current post ID.
 * @return int Number of related posts
 */
function bl_get_related_posts_count( string $field_name, int $post_id = 0 ): int {
  $post_id = $post_id ?: get_the_ID();
  $related_posts = get_field( $field_name, $post_id );
  if ( ! $related_posts || ! is_array( $related_posts ) ) {
	return 0;
  }
  return count( $related_posts );
}

用法示例:bl_get_related_posts_count( 'related_cities' ),其中 related_cities 就是你的 Relationship 字段名。如果字段为空或不是数组(比如单篇关联文章时 ACF 返回单个 ID),函数会安全地返回 0,不会报错。

Step 2:白名单 + echo 动态数据

Bricks 出于安全考虑,{echo:...} 动态数据标签默认只能调用白名单内的函数。要把自己的函数放行,再加一段:

add_filter( 'bricks/code/echo_function_names', function() {
  return [
    'bl_get_related_posts_count'
  ];
} );

然后在 Bricks 编辑器里,任意元素的动态数据输入框填入:

{echo:bl_get_related_posts_count(related_cities)}

即可实时输出当前文章的关联数量。如果页面有多个查询循环,函数默认取「当前循环项」的文章 ID,所以每个卡片都会显示各自对应的数字。

原理说明

  • get_field( $field_name, $post_id ) 是 ACF 的核心取字段函数,第二个参数传文章 ID 可以脱离「当前文章」上下文取值——这是函数支持 $post_id 参数的原因。

  • Relationship 字段返回的是数组(多选时),count() 直接得到数量;单选返回单个 ID 或字符串,函数里先判断 is_array() 再计数,避免 count() 报错。

  • bricks/code/echo_function_names 是 Bricks 官方的函数白名单过滤器,只有注册过的函数才能通过 {echo:...} 在构建器里执行。

相关阅读:

常见坑位提醒

  • 单选字段返回的不是数组:Relationship 单选时 ACF 返回单个 ID 而不是数组,函数里 is_array() 判断兜住了这种情况,返回 0 而不是报错——自己写统计逻辑时也要记得这一步。
  • 白名单最容易忘:函数注册了但 {echo:...} 不生效,九成是忘了 bricks/code/echo_function_names 这一步,排查时先看它。
  • 函数放对地方:放子主题 functions.php(去掉开头的 PHP 标签)或 Code Snippets 这类代码片段插件,别放会被主题更新覆盖的文件。

小结

这个技巧的核心就两步:一个健壮的统计函数 + 一次白名单注册。之后在 Bricks 的任何动态数据位置(标题、按钮、徽章数字)都能输出关联数量,还能搭配条件逻辑做「有关联才显示」的复合判断。如果字段是 Meta Box 的 Relationship,思路完全一致,把 get_field 换成 rwmb_meta 即可。

小结:ACF Relationship 的数量统计不需要任何插件,两个函数搞定。关键是记住 bricks/code/echo_function_names 白名单这一步,忘了它 {echo:...} 不会生效。

常见问题(FAQ)

Q:Relationship 单选字段会返回什么? A:单选时 ACF 返回单个 ID 而不是数组,函数里先判断 is_array() 再计数,避免 count() 报错。

Q:{echo:...} 不生效怎么办? A:先检查 bricks/code/echo_function_names 白名单有没有注册你的函数,这是最常见的遗漏点。

Q:这个函数在多个查询循环里怎么算? A:函数默认取「当前循环项」的文章 ID,每个卡片各算各的,互不影响。

Q:字段是 Meta Box 的怎么改? A:思路完全一致,把 get_field 换成 Meta Box 的取值函数(如 rwmb_meta)即可。

Q:需要装插件吗? A:不用,两个函数就能搞定,零插件依赖。

延伸阅读

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.

延伸阅读