首页 / 中文教程 / 教程

Bricks 按发布年份过滤文章(自动打年份标签 + WP Grid Builder 筛选)

让文章的发布年份自动成为自定义分类法的术语,再用 WP Grid Builder 在 Bricks 查询循环上按年份筛选。原文为付费教程,本文给出骨架并用 WP 官方钩子补全实现。

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

应用场景

新闻站、博客站、期刊站经常要做“按年份归档”:文章按 2023、2024、2025 分组或筛选。手动维护太痛苦——每年都要记得给旧文章补标签,漏一篇就缺一块。

BricksLabs 的思路是把这个问题变成全自动:让 WordPress 在文章发布时自动把“发布年份”作为术语(term)挂到一个自定义分类法(如 year-published)上,之后无论按年分组还是用筛选插件(如 WP Grid Builder)做前端年份筛选,数据都是现成的、始终是最新的。原教程是 Pro 付费墙锁定(关键代码被截断),本文按 WP 官方钩子补全实现。

步骤骨架(原教程)

原教程的操作路径(代码部分被付费墙截断):

  1. 创建自定义分类法:用代码或插件(CPT UI / ACF / Meta Box)为你的文章类型创建一个叫 year-published 的自定义分类法;
  2. 自动打标签:在子主题 functions.php 里加一段代码(原文截断),让文章发布时自动把年份设为该分类法的术语——这是整个方案的核心;
  3. 前端筛选:用 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 中按年份筛选

数据就绪后,前端筛选有两种玩法:

  1. WP Grid Builder(原教程推荐):它的 Facet 组件支持按自定义分类法术语筛选,把 Facet 挂到 Bricks 的查询循环上,用户点年份即 AJAX 刷新结果,无需刷新页面。具体接入步骤:建 Facet(类型 Taxonomy,选择 year-published)→ 在 Bricks 查询循环设置里指定该 Facet 作为筛选来源。
  2. 纯 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),效果与原教程一致。这也是处理付费墙教程的标准姿势:骨架 + 官方钩子补全,不编造原文代码。

需要帮忙?

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

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

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