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

首页 / 中文教程 / 教程

Bricks Query Loop 只输出自定义字段里指定的文章 ID

教程:Bricks Query Loop 只输出自定义字段里指定的文章 ID——query loop 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。

Ray ChanRay Chan·2026-08-11·约 2 分钟
目录
  1. 1.需求:按自定义字段的 ID 列表查询
  2. 2.Step 1:准备字段与数据
  3. 3.Step 2:PHP 查询编辑器

需求:按自定义字段的 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 查询编辑器

  1. 在应用于 page 文章类型所有单页的 Bricks 模板里设置一个查询循环(Query Loop)。

  2. 点击查询图标,打开 “Query editor (PHP)” 开关。

  3. 粘贴:

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 别用默认值。比写完整自定义查询 + 钩子简单一个数量级,而且所有配置都在构建器里完成,换人维护也看得懂。

常见误区

几个易错点:一是字段值必须是数组(多选/数组型字段天然满足),如果存的是逗号字符串,PHP 查询拿到的不是数组,post__in 会失效;二是 posts_per_page 别用默认值,要设成 -1 或大于数组长度的数,否则结果被默认每页数量截断;三是模板应用范围要覆盖目标页面,否则 rwmb_meta() 读不到对应页面的字段值,列表不更新。另外 ACF 用户把取值函数换成对应 get_field 即可,思路不变。

常见问题(FAQ)

Q:为什么只输出了部分 ID? A:posts_per_page 用了默认值被截断,设成 -1 或大于数组长度的数即可全输出。

Q:字段值是逗号字符串能用吗? A:不能,post__in 要吃数组,数组型/多选型字段才满足,字符串得先拆成数组。

Q:列表没跟着字段变? A:检查模板应用范围是否覆盖目标页面,以及字段名是否拼错,rwmb_meta 读的是当前页上下文。

Q:ACF 字段也能这么用? A:能,把 rwmb_meta 换成对应 get_field 即可,逻辑完全一致。

延伸阅读

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.

延伸阅读