首页 / 中文教程 / 教程

Bricks 输出 Meta Box 设置页里选中文章的数据(PHP 查询实现)

Meta Box 设置页的 Post 类型字段选了一篇文章,如何在页面上输出那篇文章的标题、正文和自定义字段?用 Bricks PHP 查询编辑器。付费原文锁定,给出补全实现。

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

⚠️ 原文为 BricksLabs Pro 付费教程,核心代码锁定。本文按可见步骤写场景 + 骨架,代码用 Bricks 官方钩子/官方查询功能补全并标注「补全实现」。

场景:设置页选人,页面显示该人资料

用户需求:有一个 CPT「开发者档案」(developer profiles),每篇档案存一位开发者的信息字段。然后在 Meta Box 设置页(Settings Page)里放一个 Post 类型字段,运营人员从这里选一位“当前重点展示的开发者”。现在要在首页输出这位开发者的档案数据——标题、正文、自定义字段(如邮箱、技术栈)。

用户的原始尝试全失败,他试过:

{mb_wl-settings_active_dev_profile:meta:dev_contact_email}
{mb_wl-settings_active_dev_profile:meta:post_id}
{mb_get_post_meta:{mb_wl-settings_active_dev_profile},dev_contact_email}

都只显示出了 Post 名称(选项的标签),取不到选中文章的元数据。

为什么动态数据直接取不出来

根因在于 Meta Box 设置页的 Post 字段,存进 wp_options 表(设置页是全局选项,不是文章元数据),值只是选中文章的 ID。动态数据标签 {mb_xxx:meta:yyy} 是按“文章上下文”解析的——它以为你在当前文章里取 meta,自然取不到另一篇文章的数据。正确思路是:先把设置页里的文章 ID 取出来,再把它作为查询目标,让 Bricks 把查询上下文切换成那篇文章

Step 1:PHP 查询编辑器取选中文章(补全实现)

Bricks 的 PHP 查询编辑器支持动态数据解析,可以直接从设置页读出选中文章 ID,返回它作为查询结果。以下为补全实现(基于 Bricks 官方 PHP 查询功能,非原文代码),粘贴到 Query Loop 的 PHP 查询编辑器:

// 补全实现:从 Meta Box 设置页读取选中的 Post 字段值并作为查询结果
// 假设:CPT = team;设置页 ID = settings;Post 字段 ID = team_member
$selected_post_id = rwmb_meta( 'team_member', [ 'object_type' => 'setting' ], 'settings' );

if ( empty( $selected_post_id ) ) {
    return []; // 未选择时返回空结果,配合 {query_results_count} 条件隐藏区块
}

return [
    'post_type' => 'team',
    'post__in'  => [ (int) $selected_post_id ],
    'posts_per_page' => 1,
];

要点:

  • rwmb_meta( $field_id, ['object_type' => 'setting'], $settings_page_id ) 是 Meta Box 官方 API 读取设置页字段值的方式(第二个参数声明对象类型是 setting,第三个参数是设置页 ID)。
  • 把读到的 ID 放进 post__in,查询就锁定为这一篇文章。循环项即选中文章,循环内所有动态数据(标题、正文、任意自定义字段)自动切换为该文章上下文。
  • 设置页里没选任何文章时返回空数组——配合 {query_results_count:bricksid} 条件(见本站相关教程),区块无结果时整体隐藏,避免显示空白。

Step 2:模板输出字段数据

  1. 在 Section → Container 里加 Block,开启 Query Loop,Query 类型选 Custom Query / PHP,粘贴 Step 1 的代码。
  2. 循环项模板内正常放元素:
    • 标题:{post_title}(自动是选中开发者档案的标题)。
    • 正文:{post_content}
    • 自定义字段:{mb_开发者档案字段组_字段ID} 或按你的字段配置选择动态数据。
  3. 若区块需要在未选择时隐藏,给区块挂动态数据条件 {query_results_count:区块BricksID}(大于 0)。

中文小结

“Meta Box 设置页选中文章 → 页面输出该文章数据”的通用解法是用 PHP 查询编辑器做一次上下文跳转rwmb_meta() 读出设置页 Post 字段的 ID,构造 post__in 查询锁定该文章,循环内的所有动态数据自然指向它。核心认知:设置页数据在 wp_options、文章数据在 wp_postmeta,动态数据标签无法跨表解析,必须通过查询把上下文切换过去。这套模式同样适用于 ACF Options 页的 Post 对象字段(get_field('字段', 'option'))——思路完全一致,换函数名即可。

需要帮忙?

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

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

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