Bricks 判断 ACF Repeater 是否有数据行:条件输出进阶
Bricks 原生支持根据 ACF 基础类型字段(如 Text)是否有值来做条件输出——在动态数据条件里选 != 并把值留空即可。比如字段 header_notice 非空时才显示某个元素。
但字段类型是 ACF Repeater(返回数组)时,原生条件判断就不够用了。这篇教你用自定义函数搞定。
本文基于 BricksLabs 公开免费教程实译,代码完整可复用。原文:Checking for ACF Repeater rows in Bricks
核心思路:自定义函数返回布尔
我们需要定义一个返回 true(1) 或 false(0) 的自定义函数,然后在 Bricks 条件里用 = 1(判断非空)或 != 1(判断为空)来条件输出。
代码实现
在子主题 functions.php(去掉开头 <?php 标签)或代码片段插件里加入:
// 检查给定 ACF Repeater 字段是否有数据行
function bl_have_rows( $field ) {
// 若 ACF 未启用,返回 false
if ( ! class_exists( 'ACF' ) ) {
return false;
}
return get_field( $field ) ? true : false;
}
在 Bricks 里白名单并调用
Bricks 出于安全考虑,默认只允许调用白名单内的函数。把 bl_have_rows 加入白名单:
add_filter( 'bricks/code/echo_function_names', function() {
return [
'bl_have_rows'
];
} );
之后在 Bricks 的条件设置里,就可以用 bl_have_rows('你的repeater字段名') 配合 = 1 / != 1 来控制元素显示。
小结
- 基础类型字段:直接用 Bricks 原生
!= 空值条件 - Repeater 等数组型字段:自定义
bl_have_rows()函数 + 白名单钩子 - 条件值用
= 1(有数据行)或!= 1(无数据行)
这个方法同样适用于其他返回数组的 ACF 字段类型。
延伸阅读
延伸阅读
Bricks 按 ACF Options 字段条件显示元素(Pro 思路卡)
选题卡:只有当 ACF Options 页面上的某个字段(如 phone)有值时,才渲染带电话图标的容器。思路+钩子,完整代码见 BricksLabs Pro。
tutorialBricks 给区块加草稿状态开关:编辑器里隐藏未定稿区块
教程:用代码片段给 Bricks 所有元素加一个“草稿状态”勾选框,勾选后前端不输出。适合临时隐藏未定稿区块(Bricks 2.0 已原生内置,本文作历史方案参考)。
tutorialBricks Tabs 自动轮播:滚动到可视区自动切换标签页
教程:给 Bricks 的 Tabs(Nestable)元素加自动轮播——滚动到可视区域后每 x 秒自动切换标签页,适合首页产品/方案展示。
tutorialBricks 嵌套滑块做网格轮播:用 SplideJS 扩展实现多行多列
教程:在 Bricks 默认嵌套滑块(nested slider)里做出多行多列的网格轮播效果,用 SplideJS 的 grid 扩展实现,适合产品墙/案例墙展示。
