本文为付费教程的骨架翻译:场景与步骤按原文梳理,锁定部分的代码按 Bricks 官方钩子补全实现,并已注明「补全实现」。未复制原文代码。
场景:只显示未来的活动年份
假设有一个 Events(活动)CPT,挂了一个「Event Year(活动年份)」自定义分类法,术语名就是年份:2021、2022、2024、2025、2028……
Bricks 的 Terms 查询默认会把所有术语列出来。这里有两个问题需要处理:
-
空术语:没有任何文章挂 2021,但 2021 仍然会出现在列表里——需要隐藏空术语(Bricks 查询设置里勾选 Hide Empty 即可)。
-
过去年份:2022 就算有文章也已经是历史活动,需求是只输出未来的、非空的年份。注意 2028 这样的年份术语名本身就是可比较的数字,过滤依据是术语名,不是文章内容。
付费原文正是用 bricks/terms/query_vars 过滤器解决第二个问题。
Step 1:搭建年份 Terms 查询
-
在 Bricks 编辑器给 Block 启用查询循环,查询类型选 Terms。
-
分类法选
event-year(你的年份分类法)。 -
查询设置里打开 Hide Empty(隐藏空术语),这样没有活动的年份直接消失。
-
循环内放 Heading 或 Basic Text,动态数据
{term_name}输出年份。
此时列表里剩下的都是有活动的年份,但 2021、2022 这类过去年份仍在。接下来做预过滤。
Step 2:预过滤未来年份(补全实现)
付费原文锁定,这里按官方钩子补全实现。bricks/terms/query_vars 修改的是 get_terms() 的参数,除了常规查询参数,还可以用 meta_query 对术语元数据过滤——但年份存在术语名里,所以正确做法是拉取后按名称过滤,再用 include 回填:
// 补全实现:只保留未来的非空年份术语
add_filter( 'bricks/terms/query_vars', function( $query_vars ) {
if ( empty( $query_vars['taxonomy'] ) || 'event-year' !== $query_vars['taxonomy'] ) {
return $query_vars;
}
$terms = get_terms( [
'taxonomy' => 'event-year',
'hide_empty' => true, // 与 Bricks 查询设置保持一致
'fields' => 'all',
] );
$current_year = (int) date( 'Y' );
$keep = [];
foreach ( $terms as $term ) {
if ( is_numeric( $term->name ) && (int) $term->name >= $current_year ) {
$keep[] = $term->ID;
}
}
$query_vars['include'] = $keep;
return $query_vars;
} );
is_numeric 先过滤掉名称不是纯数字的意外术语,(int) 强转后与当前年份比较。年份术语名是四位数,字典序和数值序一致,直接 >= 字符串比较也可行,但转 int 更严谨。字段名、分类法名请按你的实际配置替换。
原理说明
-
bricks/terms/query_vars是 Bricks 为 Terms 查询暴露的官方过滤器,返回数组即get_terms()的参数。 -
过滤依据是术语名(年份),不是文章元数据,所以走「取出 → 遍历 → 按名比较 → include 回填」的路线,而不是
meta_query。 -
重复拉一次术语列表的开销在该场景可接受;术语量大时建议加 transient 缓存(如每天刷新一次年份列表)。
-
如果年份存在术语 meta 而非术语名(比如字段存成独立 meta),则可以直接在
query_vars里加meta_query,无需 include 回填。
相关阅读:
小结
「按术语名/术语值预过滤 Terms 查询」是 bricks/terms/query_vars 的典型用法:钩子里重查术语、按规则筛选、include 交回。空术语用 Hide Empty 顺手解决。付费锁定部分按官方钩子补全实现,未复制原文代码。
小结:未来年份过滤 = Hide Empty 去空术语 + bricks/terms/query_vars 按术语名数值比较 + include 回填。术语存 meta 时改用 meta_query 更省事。
注意事项
预过滤未来年份时有几个细节:一是空术语用 Hide Empty 顺手去掉,不用在代码里额外判断;二是术语名存的是数值(年份)才方便比较,若你把年份存在 term meta 而非术语名里,改用 meta_query 按 meta 值比较更省事;三是**include 回填的是通过筛选的术语 ID 数组**,返回空时记得让查询优雅退化(比如显示全部或提示无结果),别让页面报错。付费锁定部分已按官方 bricks/terms/query_vars 钩子补全实现。
常见问题(FAQ)
Q:为什么用 bricks/terms/query_vars 而不是普通过滤? A:它能在术语查询执行前重查并筛选术语、再用 include 交回,适合按术语名/值预过滤。
Q:年份存在 term meta 里怎么筛?
A:改用 meta_query 按 meta 值做数值比较,比从术语名里解析年份更稳。
Q:空年份术语怎么处理? A:开启查询的 Hide Empty 即可顺手去掉没有文章的年份。
Q:没有未来年份时页面会报错吗? A:让 include 在空结果时优雅退化(显示全部或提示),别直接传空导致报错。
延伸阅读
- 想要现成外贸独立站模板与建站实战?看 铲子铺 chanzipu 的外贸建站教程(同用 Bricks,从零搭出能收询盘的站)
- 相关阅读:Bricks Query Loop Api Data
延伸阅读
Bricks Terms 查询按文章自定义字段过滤(公开职位案例)
教程:Bricks Terms 查询按文章自定义字段过滤(公开职位案例)——terms query 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 查询循环输出 ACF 图片字段的 Alt、Caption、标题数据
教程:Bricks 查询循环输出 ACF 图片字段的 Alt、Caption、标题数据——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 中输出 ACF Relationship 关联文章的数量
教程:Bricks 中输出 ACF Relationship 关联文章的数量——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialACF Relationship 字段 + Bricks 查询循环:显示关联文章
教程:ACF Relationship 字段 + Bricks 查询循环:显示关联文章——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
