在 Typecho 主题中集成面包屑导航
早期能找到 Typecho 面包屑文章都使用 category();
+ title();
组合来实现,但它只显示单个分类,无法满足多层级面包屑导航效果。好在在开发版中的 Typecho 已新增 directory();
函数,可输出多级面包屑导航。
关于 category 与 directory 函的区别
从 category();
源码中可以看出,它只检索出所有已选定分类并输出内容:
而 directory();
则检索出已选定分类,只取第一条分类,将分类的父级逐级输出,对多级分类的输出更友好。
对 directory 函数的改进
其实 Typecho 内置的 directory();
函数已经足够满足基本的面包屑导航功能了。但多级分类有可能导致搜索引擎错将父级分类对文章进行关联,导致重复及错乱收录。针对本站主题的优化,我在当前选定的分类链接上注明 H2 标签,以便以告诉搜索引擎当前分类权重。
PHP
- // 为首页加上 nofollow 避免重复收录
- printf('<a href="%1$s" rel="nofollow">%2$s</a> > ', $this->options->siteUrl, _T('Home') );
- // 当前当前分类,等同于 category(); 同级
- $category = $this->categories[0];
- // 获取所有父级分类
- $directory = \Widget\Metas\Category\Rows::alloc()->getAllParents( $category['mid'] );
- // 将当前分类也加入父级分类数组中
- $directory[] = $category;
- // 判断是否有分类
- if ( $directory ) {
- // 建立临时缓存
- $result = [];
- // 索引分类数据并将 html 标签重组至临时数组中
- foreach ( $directory as $category ) {
- $result[] = sprintf('<a href="%1$s" title="' . _T('View all articles in %3$s') . '">%2$s</a>', $category['permalink'], $category['name'], $category['description'] ?: $category['name'] );
- }
- // 为当前分类加上 H2 标签
- $result[] = '<h2>' . array_pop( $result ) . '</h2>';
- // 输出数据
- echo implode( " > ", $result );
- } else {
- // 排除无分类的特殊情况
- echo '<h2>未分类</h2>';
- }
最终改进后的输出结构:
在 Typecho 主题中集成面包屑导航
https://www.uevan.com/breadcrumbs-in-typecho
https://www.uevan.com/breadcrumbs-in-typecho
本文作者
maple's sky
maple's sky
许可协议
CC BY-NC 4.0
CC BY-NC 4.0
转载或引用本文时请遵守许可协议,注明出处、不得用于商业用途!