需求场景
Bricks 官方群里有用户问:Bricks 的面包屑能不能用 PHP 过滤器自定义?他的具体需求是——文章归档在 Uncategorized(未分类)分类下,面包屑里会显示 Home / Uncategorized / 文章标题,而他想把中间的 /Uncategorized/ 替换成一个指向其他页面(非归档页)的链接。
Bricks 的面包屑元素在输出时会触发一个官方未文档化的过滤器 bricks/breadcrumbs/items,我们可以用它拿到的面包屑项数组做任意修改。
bricks/breadcrumbs/items 过滤器
在子主题 functions.php 或代码片段插件中添加:
add_filter( 'bricks/breadcrumbs/items', function ( array $breadcrumb_items ): array {
if ( ! is_singular( 'post' ) ) {
return $breadcrumb_items;
}
if ( isset( $breadcrumb_items[1] ) ) {
$breadcrumb_items[1] = str_replace( 'category/uncategorized/', '', $breadcrumb_items[1] );
}
return $breadcrumb_items;
});
效果:在前端单篇文章页上,把面包屑里所有 category/uncategorized/ 字符串替换成空字符串——Uncategorized 这个链接的 URL 中 category/uncategorized/ 部分被清掉,剩下的就指向站点首页,视觉上 Uncategorized 变成了“首页”链接。
代码逻辑:
-
is_singular( 'post' ):只在单篇文章页生效,其他页面原样返回(用你自己的条件替换即可,比如只针对某个自定义文章类型); -
$breadcrumb_items[1]:面包屑数组的第 2 项(索引 1)通常就是“分类”那一项。注意数组的键不一定是 0/1/2 连续的,稳妥做法是先array_values()重排或遍历检查,原教程按索引 1 处理即可覆盖多数场景; -
str_replace:字符串替换,只改这一处 URL 片段,不动面包屑其他部分。
BricksExtras 面包屑的写法
如果你用的是 BricksExtras 的 Site Breadcrumbs 元素(作者也推荐它,因为配置项更多),过滤器名不同,逻辑一样:
add_filter( 'bricksextras/breadcrumbs/', function ( array $breadcrumbsFlat ): array {
if ( ! is_singular( 'post' ) ) {
return $breadcrumbsFlat;
}
if ( isset( $breadcrumbsFlat[1] ) ) {
$breadcrumbsFlat[1] = str_replace( 'category/uncategorized/', '', $breadcrumbsFlat[1] );
}
return $breadcrumbsFlat;
});
原理说明
这两个过滤器暴露的都是“面包屑项数组”,每个元素是带 URL 的 HTML 片段或纯文本。修改面包屑本质就是改这个数组:替换字符串、删除某项、插入新项(比如在分类前插入“产品”链接)都是同一个套路。
一个小提醒:如果后台设置里把面包屑的“首页”项文字改了(比如显示站点名),替换后的效果会相应变化;想精确控制,可以打印 $breadcrumb_items 数组(error_log( print_r( $breadcrumb_items, true ) ))先看清结构再动手。
相关阅读:
常见误区
几个坑:一是直接改 Bricks 自带面包屑的 bricks/breadcrumbs/items 过滤器,可能和主题自带面包屑结构对不上,先确认你用的是 Bricks 面包屑还是别的;二是用 BricksExtras 的面包屑时写法不同,别把本文钩子套到 Extras 上;三是改完没清缓存,前端还是老结构。面包屑影响站内链接和 SEO 结构,改之前先在暂存环境确认层级对。
小结
本文是“官方未文档化钩子”的典型用法:Bricks 很多元素内部都有这种隐藏过滤器,bricks/breadcrumbs/items 就是面包屑的修改入口。掌握了“拿数组 → 改数组 → 返回数组”的三步套路,面包屑想怎么定制都行——换分类名、合并层级、给归档链接加参数,全在一个过滤器里解决。
顺带一提:用 BricksExtras 的用户记得用 bricksextras/breadcrumbs/ 这个过滤器名,两个生态的钩子互不相通。
延伸阅读
- 想要现成外贸独立站,从零搭出能收询盘的站?看 铲子铺 chanzipu 的外贸建站教程(同用 Bricks)
常见问题(FAQ)
bricks/breadcrumbs/items 改的是哪个面包屑? 改 Bricks 自带面包屑的条目,确认页面用的是 Bricks 面包屑元素而非主题自带的。
BricksExtras 面包屑写法一样吗? 不一样,Extras 有自己的过滤器写法,别把本文钩子直接套过去。
改完前端没变? 先清缓存(插件/CDN),再确认钩子命中的是哪个面包屑组件。
面包屑影响 SEO 吗? 影响,面包屑是站内层级信号,结构清晰对收录和用户体验都好。
- 相关阅读:Bricks Setup Guide
延伸阅读
Bricks 查询循环按 ACF Repeater 子字段值筛选行
教程:Bricks 查询循环按 ACF Repeater 子字段值筛选行——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 按 ACF Repeater 子字段排序行
教程:Bricks 按 ACF Repeater 子字段排序行——acf 附完整代码可直接复用,适合外贸独立站与 WordPress 开发者。
tutorialBricks 自定义元素开发入门:扩展 Element 类,写一个自己的元素
教程:Bricks 自定义元素开发入门——扩展 Bricks Element 类创建自己的元素,含控件定义、前端渲染、注册加载与代码签名机制,适合外贸独立站与 WordPress 开发者。
tutorialBricksExtras 插件介绍
教程:BricksExtras 是 Bricks 生态热门第三方扩展,补齐目录、阅读进度、滑块等实用组件。讲它是什么、能干什么、怎么装。
