场景:按图片数量决定显示什么
做作品集、房源或酒店类站点时经常遇到这样的需求:每篇文章(或循环项)通过 ACF Pro 的 Gallery 字段上传了若干张图片,页面上的某个元素要根据「图片有多少张」来决定显示与否——比如只有一张图就不显示轮播箭头,超过三张才显示「查看全部相册」按钮。
ACF 的 Gallery 字段返回的是一个图片 ID 数组,Bricks 自带的条件逻辑只能判断字段「有值/无值」,判断不了数组的长度。这个免费教程用一行核心函数解决:把数组长度暴露成动态数据。
Step 1:注册数组计数函数
把下面的代码加到子主题的 functions.php(不要带开头的 PHP 标签)或代码片段插件里:
<?php
function bl_get_acf_array_count( $field_name ): int {
return count( get_field( $field_name ) );
}
函数逻辑极简:get_field() 取出字段值(Gallery 返回数组),count() 统计元素个数。因为返回值强制声明为 int,即使字段为空(get_field 返回 false 或 null)也不会报错——count(false) 在 PHP 8 之前返回 0,PHP 8 起对非数组参数会抛警告,所以更稳妥的写法是先判断 is_array() 再计数。
Step 2:echo 标签与条件判断
回到 Bricks 编辑器,在你需要用到数量的元素上,动态数据填入:
{echo:bl_get_acf_array_count(page_gallery)}
其中 page_gallery 替换成你自己的字段名。这个标签会输出当前文章(或当前循环项)里该字段的图片数量。
配合 Bricks 的条件逻辑:选中要控制显示/隐藏的元素 → 条件(Conditions)→ 动态数据选 {echo:bl_get_acf_array_count(page_gallery)} → 操作符选「大于」→ 值填 1。这样只有图片数大于 1 时元素才渲染。在查询循环里它同样逐项生效,每张卡片各算各的。
注意:
{echo:...}标签默认只允许执行白名单内的函数。如果上述标签在前端不输出,先确认是否已通过bricks/code/echo_function_names过滤器放行(参见我们站内 ACF Relationship 数量统计教程里的白名单写法)。
原理说明
-
Gallery 字段的返回值是数组,
count()拿到的是图片总数,这是整个方案的地基。 -
{echo:...}是 Bricks 在元素渲染时执行 PHP 函数并回填结果的动态数据机制,适合这类「Bricks 没直接提供、但一行 PHP 就能算出来」的值。 -
条件逻辑(Conditions)会在渲染前求值,动态数据先算出数字、条件再比较,两者串起来就实现了「按数量决定显示」。
-
该函数不限于 Gallery:任何返回数组的 ACF 字段(如 Relationship、Taxonomy 多选、Checkbox 多选)都能用同一个函数统计数量。
相关阅读:
更多用法与注意事项
这个计数函数不限于 Gallery:Relationship、Taxonomy 多选、Checkbox 多选等任何返回数组的 ACF 字段都能直接复用。几个注意点:
- 函数放子主题
functions.php或代码片段插件,别放进会被主题更新覆盖的文件; - PHP 8 下字段为空时
count(false)会抛警告,稳妥写法是先is_array()判断再计数(见上文 Step 1); {echo:...}有函数白名单:前端不输出时,先检查是否用bricks/code/echo_function_names过滤器放行了你的函数。
把这几个点记牢,这套「数组长度 → 动态数据」的套路就能到处复用。
小结
一行 count( get_field() ) 就把「数组字段的长度」变成了 Bricks 可用的动态数据,再交给条件逻辑做显示判断。这是 ACF + Bricks 组合里复用率极高的通用套路,值得收进你的 snippet 库。
小结:统计 ACF 数组字段数量 = 一个通用计数函数 + echo 动态数据 + 条件逻辑。Gallery、Relationship、多选字段全部通用,免费且零依赖。
常见问题(FAQ)
Q:这个计数函数要装插件吗?
A:不用,一行 PHP 函数加进子主题的 functions.php(或代码片段插件)即可,零依赖。
Q:除了 Gallery,还能数什么? A:任何返回数组的 ACF 字段都行:Relationship、Taxonomy 多选、Checkbox 多选,统计逻辑完全一样。
Q:{echo:...} 标签在前端不输出怎么办?
A:{echo:...} 默认有函数白名单,确认是否通过 bricks/code/echo_function_names 过滤器放行了函数名,放行后再试。
Q:在查询循环里会每项单独计算吗? A:会。动态数据在循环里逐项求值,每张卡片按各自字段的图片数量做条件判断,互不影响。
Q:字段为空时会报错吗?
A:函数返回值声明为 int,字段为空返回 0;PHP 8 下 count() 对非数组会抛警告,建议先用 is_array() 判断再计数。
延伸阅读
- 想要现成外贸独立站模板与建站实战?看 铲子铺 chanzipu 的外贸建站教程(同用 Bricks,从零搭出能收询盘的站)
- 相关阅读:Bricks Setup Guide
延伸阅读
Bricks 查询循环输出 ACF 图片字段的 Alt、Caption、标题数据
教程:Bricks 查询循环输出 ACF 图片字段的 Alt、Caption、标题数据——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 中输出 ACF Relationship 关联文章的数量
教程:Bricks 中输出 ACF Relationship 关联文章的数量——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 让元素输出 N 次(N = 自定义字段值):Array 查询类型实战
教程:Bricks 让元素输出 N 次(N = 自定义字段值):Array 查询类型实战——query loop 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 动态数据详解
教程:动态数据让元素显示随内容变化的值而非写死文本。系统讲它的机制、来源与 Query Loop 里的典型用法。
