在 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,即可在前端取出对应图片。
延伸阅读
HappyFiles 文件夹图片用 Bricks Query Loop 输出(三种方式)
教程:HappyFiles 文件夹图片用 Bricks Query Loop 输出(三种方式)——query loop 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 查询循环按 ACF Repeater 子字段值筛选行
教程:Bricks 查询循环按 ACF Repeater 子字段值筛选行——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 按 ACF Repeater 子字段排序行
教程:Bricks 按 ACF Repeater 子字段排序行——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 自定义元素开发入门:扩展 Element 类,写一个自己的元素
教程:Bricks 自定义元素开发入门——扩展 Bricks Element 类创建自己的元素,含控件定义、前端渲染、注册加载与代码签名机制,适合外贸独立站与 WordPress 开发者。
