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

首页 / 中文教程 / 教程

Meta Box Relationship 字段 + Bricks 查询循环:显示关联文章

教程:Meta Box Relationship 字段 + Bricks 查询循环:显示关联文章——meta box 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。

Ray ChanRay Chan·2026-08-11·约 2 分钟
目录
  1. 1.Meta Box Relationship 与 Bricks 查询循环
  2. 2.Step 1:建字段与双向关联
  3. 3.Step 2:PHP 查询编辑器取关联 ID
  4. 4.排序、计数与常见坑

Meta Box Relationship 与 Bricks 查询循环

Meta Box 的 Relationship 字段(Meta Box 自带功能,不需要额外插件)用来建立 CPT 之间的多对多关联,比如“产品关联到创作者”“活动关联到证言”。Bricks 查询循环内置了 MB Relationship 查询类型,单篇页上零代码就能列出关联文章——这一点和 ACF Relationship 一样。

但内置类型同样有边界:拿不到关联数量做条件渲染、排序规则有限、无法叠加额外筛选。这篇用 PHP 查询编辑器给出完全可控的写法:rwmb_meta() 取关联 ID 数组,塞进 post__in,其余交给 WP_Query 参数体系。

Step 1:建字段与双向关联

  1. 建好两个 CPT,比如 game(游戏)和 review(评测)。

  2. 给 game 加一个字段组,字段类型选 Relationship,字段 ID related_reviews,Post Type 选 review,勾选 Multiple(允许选多个)。

  3. 想让关系双向(在评测侧也能看到关联的游戏),在 Relationship 字段设置里启用双向关联,并填上对面 CPT 的对应字段 ID——Meta Box 会在两端各建一个字段,后台编辑任何一侧都能维护关系。

Step 2:PHP 查询编辑器取关联 ID

  1. 新建类型为 Single 的模板,模板条件设为 game 的单篇。

  2. 结构:Section 里放 Post Title / Post Content;再一个 Section 放 “Related Reviews” 标题和 Container > Block。

  3. Block 启用查询循环,打开 Query editor (PHP),粘贴:

$related = rwmb_meta( 'related_reviews' );
// 没有关联评测时返回空结果
if ( empty( $related ) ) {
  return [ 'post__in' => [ 0 ] ];
}
return [
  'post_type'      => 'review',
  'post__in'       => (array) $related,
  'orderby'        => 'post__in',
  'posts_per_page' => -1,
];

和 ACF 版的区别就在取值函数:rwmb_meta( 'related_reviews' ) 在单篇模板里自动读当前文章的字段值,Relationship 字段默认直接返回 ID 数组(ACF 默认返回文章对象,Meta Box 默认返回 ID,这是两个插件最典型的差异),所以这里直接用 (array) $related 转一下类型就行,不需要 wp_list_pluck。

其余逻辑一致:orderby => 'post__in' 保持后台手动排序;空值返回 [ 'post__in' => [ 0 ] ] 让查询必然为空,防止“没关联就显示全部”。

  1. 循环里放 Post Title、Featured Image 等元素输出每篇评测。

相关阅读:

排序、计数与常见坑

几个实用补充:

  • 手动顺序优先:后台拖拽的顺序就是 $related 数组的顺序,配合 orderby => 'post__in' 原样输出。想按发布日期排,把 orderby 改成 'date' 加 'order' => 'DESC' 即可;

  • 计数与条件渲染:需要“有相关评测才显示整个区块”时,可以在区块外层加条件,或用自定义动态标签 {bl_related_count} 输出 count( rwmb_meta( 'related_reviews' ) )(注册方式见 bricks/dynamic_data/tags 钩子),配合 Bricks 的可见性条件做判断;

  • 空值返回类型:rwmb_meta() 对未填写的 Relationship 字段返回空数组,个别情况返回 null,所以 empty() 判断加 (array) 强转是双保险;

  • 双向关联的取值方向:在 review 单篇模板里想显示关联游戏,把字段名换成 related_games 即可,代码结构一字不改。

Relationship 与 Post 字段的区别

Meta Box 还有一类 Post 类型字段(单选/多选指向文章),容易和 Relationship 混淆。两者在 Bricks 里的取法几乎一样(都是 rwmb_meta 拿 ID 数组),区别在语义:Post 字段是单向的简单指向,适合“这篇评测关联那篇文章”;Relationship 是独立的关系表,支持双向、多对多,能在 Meta Box → Relationships 里统一管理。如果只是单页显示“相关文章”,Post 字段更轻;要做双向维护或两侧互相可见,用 Relationship。

小结:Meta Box Relationship + PHP 查询循环 = rwmb_meta() 取 ID 数组 + post__in 查询。与 ACF 版唯一实质区别是返回值形态(ID 数组 vs 对象数组)。记住 empty 兜底、(array) 强转、orderby => 'post__in' 三个细节,就能在任意单篇模板里自由输出关联文章,还能随手叠加筛选、分页和排序。

适用场景

Relationship 字段最适合多对多关联:产品↔创作者、活动↔证言、课程↔讲师,两侧都能互相看到对方。如果只是「这篇评测挂一篇文章」这种单向简单指向,用更轻的 Post 字段就够了,没必要上关系表。另外,当你需要在列表里按关联数量做条件、自定义排序或叠加筛选时,本篇的 PHP 查询写法就比内置 MB Relationship 类型更可控——内置类型搞不定的事,交给 post__in + WP_Query 参数体系。

常见问题(FAQ)

Q:Relationship 和 Post 字段怎么选? A:单向简单指向用 Post 字段更轻;双向、多对多、两侧互相可见才用 Relationship。

Q:内置 MB Relationship 类型不够用吗? A:基础列出关联文章够用;但拿不到关联数量做条件、排序和筛选受限时,用 PHP 查询更自由。

Q:ACF Relationship 写法一样吗? A:思路一样,主要区别在返回值形态(ID 数组 vs 对象数组),按形态调整取值即可。

Q:关联为空时怎么处理? A:用 empty() 判断加 (array) 强转兜底,避免返回 null 时查询报错。

延伸阅读

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.

延伸阅读