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

首页 / 中文教程 / 教程

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

教程:Bricks 按发布年份过滤文章(自动打年份标签 + WP Grid Builder 筛选)——filter 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。

Ray ChanRay Chan·2026-08-11·约 2 分钟
目录
  1. 1.应用场景
  2. 2.步骤骨架(原教程)
  3. 3.补全实现:自动打年份标签
  4. 4.在 Bricks 中按年份筛选
  5. 5.小结

应用场景

新闻站、博客站、期刊站经常要做“按年份归档”:文章按 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 参数,即可实现无插件版的年份筛选。

相关阅读:

常见误区

几个坑:一是年份标签靠手动维护,文章一多就漏打、筛选就漏内容,本文用代码自动按年份归档更稳;二是按年份筛选时没处理「未来日期」的文章,会跑到年份列表外;三是前端 URL 参数和查询没对上,点了年份没反应。做归档类筛选,重点把「标签生成」和「查询条件」用同一套年份逻辑,避免两边对不上。

小结

整套方案的精髓是把“年份”这种隐含属性显式化成 taxonomy 数据:发布时自动打标 → 年份永不过时 → 任何按术语筛选的工具都能直接用。相比手动建分类、写死年份查询,这套全自动方案一劳永逸。

付费原文虽然拿不到代码,但“自动打标签 + 按术语筛选”两个环节都有官方钩子可补全(wp_insert_post / wp_set_object_terms / bricks/posts/query_vars),效果与原教程一致。这也是处理付费墙教程的标准姿势:骨架 + 官方钩子补全,不编造原文代码。

延伸阅读

常见问题(FAQ)

年份标签一定要手动打吗? 不用,本文用代码按文章发布年份自动生成标签,省得手动维护还漏打。

未来日期的文章会进年份列表吗? 可能,逻辑里要排除未来日期,避免跑到正常年份筛选外。

点了年份没反应? 检查前端 URL 参数和后端查询是否用同一套年份格式,对不上就不触发。

能按月份筛选吗? 能,把年份逻辑换成月份(或年份+月份)即可,思路一样。

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.

延伸阅读