首页 / 中文教程 / 教程

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

Bricks 内置的 MB Relationship 查询类型之外,用 PHP 查询编辑器自己控制更灵活。rwmb_meta 取出关联 ID 数组,post__in 喂给查询循环,附带空值兜底和双向关联的设置方法。

Ray Chan·2026-08-11·约 2 分钟

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' 三个细节,就能在任意单篇模板里自由输出关联文章,还能随手叠加筛选、分页和排序。

需要帮忙?

用 Bricks 建站?我接客户项目。

从快速营销站到完整的 Bricks 建站,再到从 Elementor 迁移——我都做过。本站每篇教程都来自真实项目经验。告诉我你的需求,一个工作日内回复。

  • Bricks 建站与改版
  • Elementor / Divi → Bricks 迁移
  • Bricks → Astro / headless 性能升级
  • 速度优化,PageSpeed 95+ 目标