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

首页 / 中文教程 / 教程

在 MetaBox 选择字段中输出 HappyFiles 文件夹

教程:用 PHP 抓取全部 HappyFiles 文件夹并输出到 MetaBox 的 select 字段,含完整函数代码,可直接复用。

Ray ChanRay Chan·2026-08-18·约 2 分钟
目录
  1. 1.先注册代码
  2. 2.添加 MetaBox 字段
  3. 3.验证功能
  4. 4.前端获取对应图片(预览)
  5. 5.小结

在 MetaBox 选择字段中输出 HappyFiles 文件夹

本教程是一个系列的一部分,我会演示如何输出自定义的 HappyFiles 画廊与轮播。第一部分先讲一点 Meta Box 集成,这样你也能在 Bricks 的单篇文章模板里管理这些画廊和轮播。关于把这类代码放进子主题或代码片段插件,可参考 在 Bricks 中使用 WPCodeBox 管理专属代码片段。

Bricks 1.5.0 将引入针对 post_type 为 attachment 的查询能力,从而带来按 HappyFiles 文件夹查询的可能。这也是我把本教程拆成不同步骤的主要原因——即便如此,你在单篇模板中动态输出时仍然会需要本教程的这一步。

先注册代码

首先,你需要复制并粘贴下面提供的 PHP 片段,用来抓取所有 HappyFiles 文件夹,并以 MetaBox 所需的格式输出它们。

如果你不知道把片段放在哪里,我建议你从 Bricks 账户下载并安装子主题,把片段粘贴到它的 functions.php 文件中!

<?php
function get_happyfile_folders() {
    $outputChilds = true;
    $args = [
        "taxonomy" => "happyfiles_category",
        //"slug" => "downloads", // get Folder by slug
        "orderby" => "name",
        "order" => "ASC",
        "hide_empty" => false,
    ];

    $folders = get_terms( $args );

    $selectOptions = [];
    foreach ( $folders as $folder ) {
        if ( ! $outputChilds && $folder->parent != 0 ) {
            continue;
        }
        $selectOptions[$folder->term_id] = $folder->name;
    }
    return $selectOptions;
}
?>

从现在起,你就可以使用 get_happyfile_folders() 这个函数了,它所做的就是查找所有 HappyFiles 文件夹,并以所需格式返回它们。

参数($outputChild):

如果你不想出现选择子文件夹的选项,那就一定要把 $outputChilds 设为 false。

添加 MetaBox 字段

接下来,你需要添加你的 MetaBox 字段。我通常用 MetaBox 来管理像「职位发布(Job Listings)」这类可标准化的内容。上面这个片段是我为一个卖 fences(围栏)的客户开发的。我的 CPT 是关于不同围栏类型的,他可以选择在哪种文章类型上显示哪个 HappyFiles 画廊,并且能轻松保持参考图的最新状态。

简单说明一下这个演示用例:你需要注册你的 MetaBox 字段。上面的片段与 MetaBox 的 select 字段配合得非常好。但你不需要传入 options,而是像下面这样提供 callback 函数:

换句话说:callback: get_happyfile_folders

验证功能

我们还没有创建输出,但从现在起,你应该已经能在 select 下拉框中选择一个文件夹了。你可以在你的文章上测试一下。

前端获取对应图片(预览)

我将提供如何在前端按图片/文件查询的步骤。如果你和我一样等不及后续指南,尽管先用这段代码!;-)

function output_happyfiles() {
    // ENTER THE ID OF YOUR METABOX-FIELD HERE:
    $hf_id = rwmb_meta( 'ID-OF-YOUR-MB-FIELD-GOES-HERE' );
    $args = [
        "post_type" => "attachment",
       // "post_mime_type" => "image",
        "post_status" => "inherit",
        "posts_per_page" => -1,
        "tax_query" => [
            [
                "taxonomy" => "happyfiles_category",
                "field" => "ID",
                "terms" => $hf_id,
            ],
        ],
    ];

    $hf_query = new WP_Query( $args );
    
    // you could probably loop here through the resulsts and output the images!
    return $hf_query->posts;
}

小结

通过 get_happyfile_folders() 读取 happyfiles_category 分类下的所有文件夹,并以 term_id => name 的形式返回,就能作为 MetaBox select 字段的 callback 直接调用,让编辑者在文章中选择某个 HappyFiles 文件夹。再配合 output_happyfiles() 用 tax_query 按该文件夹 ID 查询 attachment,即可在前端取出对应图片。

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.

延伸阅读