应用场景
新闻站、博客站、期刊站经常要做“按年份归档”:文章按 2023、2024、2025 分组或筛选。手动维护太痛苦——每年都要记得给旧文章补标签,漏一篇就缺一块。
BricksLabs 的思路是把这个问题变成全自动:让 WordPress 在文章发布时自动把“发布年份”作为术语(term)挂到一个自定义分类法(如 year-published)上,之后无论按年分组还是用筛选插件(如 WP Grid Builder)做前端年份筛选,数据都是现成的、始终是最新的。原教程是 Pro 付费墙锁定(关键代码被截断),本文按 WP 官方钩子补全实现。
步骤骨架(原教程)
原教程的操作路径(代码部分被付费墙截断):
- 创建自定义分类法:用代码或插件(CPT UI / ACF / Meta Box)为你的文章类型创建一个叫
year-published的自定义分类法; - 自动打标签:在子主题
functions.php里加一段代码(原文截断),让文章发布时自动把年份设为该分类法的术语——这是整个方案的核心; - 前端筛选:用 WP Grid Builder 之类的筛选插件,在 Bricks 的查询循环上挂一个按
year-published术语筛选的下拉/按钮组。
补全实现:自动打年份标签
⚠️ 以下代码为补全实现:原付费教程代码不可见,此处用 WordPress 官方钩子(
wp_insert_post+wp_set_object_terms)实现同样效果,可直接使用。
// 文章发布/更新时,自动把发布年份挂到 year-published 分类法
add_action( 'wp_insert_post', function( $post_id, $post, $update ) {
// 只处理已发布的文章,跳过自动草稿和修订
if ( $post->post_status !== 'publish' || $post->post_type === 'revision' ) {
return;
}
if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) {
return;
}
// 从文章发布日期提取年份
$year = get_the_date( 'Y', $post_id );
// 把年份作为术语挂上去(自动创建不存在的年份术语)
wp_set_object_terms( $post_id, $year, 'year-published' );
}, 10, 3 );
逻辑拆解:
wp_insert_post在文章保存时触发,$update参数可区分新建/更新;- 只对
publish状态生效,并跳过 autosave 和 revision,避免重复打标签; get_the_date( 'Y', $post_id )取文章发布年份;wp_set_object_terms()把年份挂到year-published分类法——术语不存在时会自动创建,所以年份永远动态、无需手动维护。
配套的分类法注册(如果不用 CPT UI 等插件):
add_action( 'init', function() {
register_taxonomy( 'year-published', [ 'post', 'your_cpt' ], [
'label' => 'Published Year',
'public' => true,
'hierarchical' => true,
'show_in_rest' => true,
] );
} );
在 Bricks 中按年份筛选
数据就绪后,前端筛选有两种玩法:
- WP Grid Builder(原教程推荐):它的 Facet 组件支持按自定义分类法术语筛选,把 Facet 挂到 Bricks 的查询循环上,用户点年份即 AJAX 刷新结果,无需刷新页面。具体接入步骤:建 Facet(类型 Taxonomy,选择
year-published)→ 在 Bricks 查询循环设置里指定该 Facet 作为筛选来源。 - 纯 Bricks 方案:用查询循环的“分类法查询”参数直接筛——但年份是动态的,无法在构建器里写死,所以更实用的做法是配合 URL 参数(
?year=2025)在bricks/posts/query_vars里动态注入:
add_filter( 'bricks/posts/query_vars', function( $query_vars, $settings ) {
if ( isset( $_GET['year'] ) ) {
$query_vars['tax_query'][] = [
'taxonomy' => 'year-published',
'field' => 'name',
'terms' => sanitize_text_field( $_GET['year'] ),
];
}
return $query_vars;
}, 10, 2 );
再配合 Bricks 的 Filter 元素(下拉/按钮)提交 year 参数,即可实现无插件版的年份筛选。
小结
整套方案的精髓是把“年份”这种隐含属性显式化成 taxonomy 数据:发布时自动打标 → 年份永不过时 → 任何按术语筛选的工具都能直接用。相比手动建分类、写死年份查询,这套全自动方案一劳永逸。
付费原文虽然拿不到代码,但“自动打标签 + 按术语筛选”两个环节都有官方钩子可补全(wp_insert_post / wp_set_object_terms / bricks/posts/query_vars),效果与原教程一致。这也是处理付费墙教程的标准姿势:骨架 + 官方钩子补全,不编造原文代码。