场景:课程列表 + 每门课的日程
Bricks 查询循环支持嵌套:外层循环每输出一个循环项,内层循环就针对这个循环项再跑一次查询。经典组合是“CPT 列表 + 每篇文章的 Meta Box Group 字段”:
静态页面列出全部课程(
courseCPT),每门课下面显示它自己的日程事件——事件存在 Meta Box 的可克隆 Group 字段events里,子字段是开始时间(Start Datetime)和结束时间(End Datetime),都是 Datetime Picker 类型。
外层循环负责课程,内层循环用 Bricks 内置的 MB Group 查询类型直接读当前课程的 events 字段,两层循环的行数不同也没关系——内层循环只属于它所在的那个外层循环项。全程在构建器里点选,不需要 PHP。
Step 1:日期时间字段的存取格式
动手搭结构之前,先处理字段存取格式,这是最容易踩的坑:
-
在 Meta Box 字段设置里,把两个 Datetime Picker 子字段的 Save format 设为
Y-m-d H:i:s。 -
勾选 “Save value as timestamp”(存为时间戳)。
为什么?日期时间字段默认可能按显示格式存字符串,字符串排序和比较都不可靠。统一成时间戳存储后,后续要做“按开始时间排序”“只显示未来事件”这类操作时,数据本身就是可比的数字。注意:改格式不会自动转换已存数据——如果课程条目是在修改设置之前录入的,需要逐条重新选择一次日期时间并保存,让字段按新格式重写。
Step 2:搭建嵌套循环结构
用 Bricks 编辑一个静态页面,按下面结构搭(名称只是便于识别):
-
Section > Container:放一个 “Our Courses” 的 h2 标题。
-
标题下方加一个 Container,里面放一个 Block,改名为 “Course CPT Loop”:
-
启用查询循环,Post type 设为 Courses(课程);
-
Block 里放一个 Post Title 元素(h3),显示课程名。
-
-
在 Post Title 下方再加一个 Block,改名为 “Events Field Loop”:
-
启用查询循环,查询类型选 MB Group: Events(对应
events字段); -
循环项里放 Basic Text,通过动态数据面板的 Meta Box 分组插入开始时间和结束时间两个子字段,样式按需排版(比如“3月1日 10:00 – 12:00”)。
-
保存并查看前端:每个课程卡片下方都列出它自己的日程;没有填 events 字段的课程,内层循环为空,不会多出空白行。
相关阅读:
嵌套循环的对齐原理
嵌套循环之所以“自动对齐”,是因为 Bricks 的查询系统在渲染内层循环时,会把当前外层循环项作为查询上下文(即 object_id)传给内层查询。MB Group 查询类型读取的就是这个上下文文章的 events 字段——外层循环到哪门课,内层就读哪门课的数据,天然一一对应,不需要任何手动传参。
由此可以延伸出很多组合:
-
外层是 Taxonomy 术语循环,内层是该分类下的文章;
-
外层是 ACF Repeater 循环,内层读循环项引用的文章(配合自定义查询类型);
-
内层 MB Group 查询同样支持按子字段排序/筛选(
bricks/query/run钩子),可以在嵌套场景里叠加。
小结:嵌套查询循环 = 外层循环提供上下文 + 内层循环消费上下文。MB Group 是 Bricks 内置查询类型里最适合做嵌套的之一,因为 Group 字段天然挂在单篇文章上。记住两个要点:日期时间子字段统一用时间戳存储(改了格式要重存旧数据),内层循环的查询类型选 MB Group 并指向目标字段名。这套结构同样适用于 MB Cloneable 等其他字段形态。
性能与注意事项
嵌套循环最该警惕的是查询次数膨胀:外层 N 篇文章,内层每篇再查一次,就是 N 次额外查询。文章量不大时无所谓,量上来后要确认内层查询走了缓存或索引,必要时用 update_post_meta 预存计算结果。另一个坑是日期时间字段的存储格式——统一用时间戳,改了格式记得把旧数据重存一遍,否则内层读出来的顺序和筛选会乱。其余嵌套组合(外层术语 + 内层文章、外层 ACF Repeater + 内层引用文章)思路完全一致。
常见问题(FAQ)
Q:内层循环怎么知道外层是哪篇文章?
A:Bricks 渲染内层时会把当前外层循环项作为 object_id 传给内层查询,天然一一对应,不需要手动传参。
Q:日期字段格式要注意什么? A:统一用时间戳存储;改了格式之后旧数据要重存,否则内层读出来的排序和筛选会出错。
Q:还能怎么嵌套? A:外层是分类术语循环、内层是该分类下文章;或外层 ACF Repeater、内层读循环项引用的文章,都行。
延伸阅读
- 想要现成外贸独立站模板与建站实战?看 铲子铺 chanzipu 的外贸建站教程(同用 Bricks,从零搭出能收询盘的站)
- 相关阅读:Bricks Query Loop Api Data
延伸阅读
Bricks 按 Meta Box Group 子字段排序文章
教程:Bricks 按 Meta Box Group 子字段排序文章——meta box 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorial如何利用 Meta Box Radio 子字段值筛选 Bricks 文章 Query Loop(教程)
本 Bricks 教程讲解如何按 Meta Box 组的 Radio 类型子字段值筛选文章 Query Loop。通过 PHP query 与序列化字符串匹配,实现按 session 类型(Individual/Duet/Trio)过滤 store 自定义文章类型,适合 WP 与外贸建站开发者。
tutorialBricks 自定义查询类型:循环输出 Meta Box Checkbox List 值
教程:Bricks 自定义查询类型:循环输出 Meta Box Checkbox List 值——meta box 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 自定义查询类型:输出 Meta Box 可克隆字段
教程:Bricks 自定义查询类型:输出 Meta Box 可克隆字段——meta box 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
