首页 / 中文教程 / 教程

Bricks 嵌套查询循环:每个分类各自的 Load More 按钮 + 剩余数量

分类分组嵌套循环里,每个分类的 Load More 互不干扰且带剩余篇数。付费原文锁定,给出基于官方钩子的补全实现思路。

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

⚠️ 原文为 BricksLabs Pro 付费教程,核心代码锁定。本文按可见步骤写场景 + 骨架,代码用 Bricks 官方钩子补全并标注「补全实现」。

场景:大列表 + 每分类独立加载更多

BricksLabs 群里有位用户做产品目录:归档页结构是“外层查询列出产品分类(手机、平板…),内层查询列出该分类下的产品”。分类很多、产品上千,每分类默认只显示 4-5 个,点该分类自己的 Load More 按钮再追加。但他遇到两个硬伤:

  1. 分类列表本身是动态查询出来的,无法给每个分类选一个唯一的 CSS 选择器,AJAX 加载器不知道当前点的是哪个分类的按钮。
  2. 用 Bricks 原生的 Load more 交互,在嵌套查询循环里点击任意按钮,加载的都是错误分类的产品,或所有分组同时被影响。

这正是嵌套查询循环 + Load More 的经典坑:每个分类共享同一个查询实例 key,Bricks 的加载更多机制不知道“当前组”是哪个。

为什么原生 Load More 在嵌套循环里失效

Bricks 的 Load more 交互依赖查询元素的 data-query-* 属性和 Bricks ID。在嵌套循环里,内层查询被循环渲染多次(每个分类一份),但每份 DOM 上的查询标识相同——于是点击任一按钮,Bricks 都以为你在给“同一个查询”翻页,结果所有分组一起翻页,或翻到错误分组的数据。

方案骨架:Component + JS + 动态标签

原文的完整方案分三层,付费墙内的具体代码锁定,思路如下:

  1. Bricks Component 封装分组标记:把“分类名 + 内层产品列表 + Load More 按钮 + 剩余数量”封装成组件,每个分类实例通过组件参数获得唯一的 data-category-id 标记。
  2. 自定义 JS 读取查询 trail:Bricks 渲染查询时会在 DOM 里写入内部查询痕迹元素(query trail,含查询参数和分页信息)。JS 在它们被移除前读取,识别当前组对应的查询 key 与分类 ID,实现“点了哪个分类的按钮就只翻哪个分类的页”。
  3. 自定义 PHP 动态数据标签 {bl_remaining_posts}:首次加载时输出该分类剩余未显示的文章数,每次 AJAX 加载后由 JS 同步更新,全部加载完后隐藏按钮。

核心补全实现:剩余数量动态标签

动态数据标签部分可以用 Bricks 官方钩子 bricks/dynamic_data/tags + bricks/dynamic_data/render_tag 补全,放入子主题 functions.php(去掉开头 <?php):

// 补全实现:注册 {bl_remaining_posts:分类ID} 动态标签,非原文代码
add_filter( 'bricks/dynamic_data/tags', function( $tags ) {
    $tags['bl_remaining_posts'] = [
        'label' => 'Remaining Posts Count per Category',
        'render' => 'bl_render_remaining_posts',
    ];
    return $tags;
} );

function bl_render_remaining_posts( $tag, $post, $context, $name ) {
    // 参数:分类 ID(如 {bl_remaining_posts:12})
    $term_id = isset( $tag['args'][0] ) ? intval( $tag['args'][0] ) : 0;
    if ( ! $term_id ) {
        return 0;
    }

    // 该分类下的总文章数
    $total = (int) get_term( $term_id )->count;

    // 每分类默认显示数量(与内层查询设置保持一致,如 5)
    $per_page = 5;

    return max( 0, $total - $per_page );
}

模板里按分类输出 {bl_remaining_posts:分类ID}(分类 ID 用外层循环的 {term_id} 动态传入),按钮文案即可显示“还有 N 篇”。

中文小结

嵌套查询循环里做“每分类独立 Load More”,本质要解决两件事:每个分组的查询上下文唯一化(组件传参 + 唯一 data 标记)和 剩余数量的数据源(动态标签按分类计算)。Bricks 原生交互做不到前者,必须借助 JS 读取查询 trail 或自行维护分页状态;后者用 bricks/dynamic_data/tags 注册自定义标签即可,官方钩子齐全。骨架中“Component + 自定义 JS + 动态标签”三层结构是这类需求的通用解法,也适用于“每分类无限滚动”——把按钮换成滚动监听,触发点改成“滚动到该分组底部”即可。

需要帮忙?

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

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

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