场景:需要统计关联文章数
很多 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:不用,两个函数就能搞定,零插件依赖。
延伸阅读
- 想要现成外贸独立站模板与建站实战?看 铲子铺 chanzipu 的外贸建站教程(同用 Bricks,从零搭出能收询盘的站)
- 相关阅读:Bricks Setup Guide
延伸阅读
Bricks 查询循环输出 ACF 图片字段的 Alt、Caption、标题数据
教程:Bricks 查询循环输出 ACF 图片字段的 Alt、Caption、标题数据——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 按 ACF Gallery 图片数量做动态条件输出
教程:Bricks 按 ACF Gallery 图片数量做动态条件输出——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialACF Relationship 字段 + Bricks 查询循环:显示关联文章
教程:ACF Relationship 字段 + Bricks 查询循环:显示关联文章——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 让元素输出 N 次(N = 自定义字段值):Array 查询类型实战
教程:Bricks 让元素输出 N 次(N = 自定义字段值):Array 查询类型实战——query loop 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
