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:建字段与双向关联
-
建好两个 CPT,比如
game(游戏)和review(评测)。 -
给
game加一个字段组,字段类型选 Relationship,字段 IDrelated_reviews,Post Type 选review,勾选 Multiple(允许选多个)。 -
想让关系双向(在评测侧也能看到关联的游戏),在 Relationship 字段设置里启用双向关联,并填上对面 CPT 的对应字段 ID——Meta Box 会在两端各建一个字段,后台编辑任何一侧都能维护关系。
Step 2:PHP 查询编辑器取关联 ID
-
新建类型为 Single 的模板,模板条件设为
game的单篇。 -
结构:Section 里放 Post Title / Post Content;再一个 Section 放 “Related Reviews” 标题和 Container > Block。
-
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 ] ] 让查询必然为空,防止“没关联就显示全部”。
- 循环里放 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 时查询报错。
延伸阅读
- 想要现成外贸独立站模板与建站实战?看 铲子铺 chanzipu 的外贸建站教程(同用 Bricks,从零搭出能收询盘的站)
- 相关阅读:Bricks Query Loop Api Data
延伸阅读
Bricks 自定义查询类型:循环输出 Meta Box Checkbox List 值
教程:Bricks 自定义查询类型:循环输出 Meta Box Checkbox List 值——meta box 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 按 Meta Box Group 子字段排序文章
教程:Bricks 按 Meta Box Group 子字段排序文章——meta box 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks Query Loop 按 Meta Box Group 的 Radio 子字段筛选文章
教程:Bricks Query Loop 按 Meta Box Group 的 Radio 子字段筛选文章——query loop 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks Query Loop 只输出自定义字段里指定的文章 ID
教程:Bricks Query Loop 只输出自定义字段里指定的文章 ID——query loop 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
