需求:按自定义字段的 ID 列表查询
有用户提问:我在一个 CPT 的自定义字段里存了一串文章 ID。在 Bricks 模板上,我需要只针对这些 ID 跑一个查询。怎么告诉查询循环构建器只使用自定义字段里的这些 ID?
这个需求的典型场景是“手动精选”:编辑不希望依赖分类、标签或日期规则,而是自己决定首页/专题页展示哪几篇文章,顺序也要自己控制。把 ID 列表存在一个自定义字段里,模板端再按这份列表输出,是最灵活的方案——内容运营不用碰代码,改字段值就能换展示内容。
在 PHP 里实现很简单,就是:
post__in => $custom_field
但怎么把它塞进 Bricks?必须自定义一个 PHP 查询再钩进构建器吗,还是有更简单的办法?
Step 1:准备字段与数据
答案是:有更简单的办法。Bricks 提供了 PHP 查询编辑器(Query editor),可以直接在构建器的查询对话框里修改查询参数,不用再到外部用代码片段插件或子主题的 functions.php 折腾。
一般情况下,如果需求是“编辑文章时选择一篇或多篇文章”,用 Meta Box 的 “Post” 类型字段或 Relationship 字段更合适,因为它们在编辑界面有友好的选择器。但按用户的问题,这里用 “Select advanced”(高级选择)字段类型来演示:
- 字段组位置设为 Post type = Page(页面)。
- 字段 ID 用
post_ids,类型为 Select advanced,允许多选。 - 在某张示例页面上填充几篇文章 ID。
Step 2:PHP 查询编辑器
- 在应用于
page文章类型所有单页的 Bricks 模板里设置一个查询循环(Query Loop)。 - 点击查询图标,打开 “Query editor (PHP)” 开关。
- 粘贴:
return [
'post__in' => rwmb_meta( 'post_ids' ),
'posts_per_page' => '-1',
];
其中 post_ids 是字段组的 ID(字段名)。rwmb_meta() 是 Meta Box 提供的读取字段值的函数,会返回所选文章 ID 的数组。
保存后,Bricks(再传给 WordPress)就会只抓取那些 ID 在自定义字段值数组里的文章。注意 posts_per_page 设成 '-1'(或较大数字)是为了确保不会因为默认的每页数量截断结果——post__in 数组有多长就应该输出多长。
如果你是 ACF 用户,把 rwmb_meta( 'post_ids' ) 换成对应的 ACF 取值函数即可,思路完全一样。另外这个查询循环本身也可以配合 Bricks 的 Query Filters 一起用:访客在前端筛选时,post__in 的约束依然生效,筛选只是在这个基础上收窄结果。
注意一个小细节:rwmb_meta() 读取的是当前页面/文章上下文下的字段值。因为模板应用在单页上,它读到的就是正在浏览那张页面的 post_ids 字段——这正是我们想要的“每张页面显示各自的精选列表”。如果发现列表没变化,先检查模板应用范围是不是覆盖了所有目标页面,再检查字段 ID 是否拼写一致。
小结:这个技巧的本质是把“取字段值”这件事交给 PHP 查询编辑器,post__in 直接吃数组。适用于手动精选文章列表、推荐位、关联内容等场景。要点:字段值必须是数组(多选型字段天然满足),字段名要写对,posts_per_page 别用默认值。比写完整自定义查询 + 钩子简单一个数量级,而且所有配置都在构建器里完成,换人维护也看得懂。