WordPress面包屑归档名称显示异常 如何实现指定路径格式
问题根因
- 你不应该直接修改WordPress核心的
get_archive_title()函数,核心文件的修改会在WordPress版本更新后被覆盖,而且你修改的逻辑本身就有问题:get_the_title()在单文章页会返回当前文章的标题,这就是你进入详情页后出现两次重复标题的原因。 - 原有面包屑的逻辑本身有错误:在非归档的文章详情页直接调用
get_the_archive_title()不会自动返回当前文章所属的归档标题,而且你给归档位设置的链接是the_permalink(),这是当前文章的链接,不是对应归档页的链接。
修复步骤
- 首先撤销你对
get_archive_title()核心函数的所有修改,核心功能的自定义要通过钩子实现,不要动原生代码。 - 替换原有面包屑的代码为下面的版本,逻辑适配你要的
Home > 归档标题 > 文章标题格式,默认适配默认文章类型的分类归档,如果是自定义文章类型可以自行调整分类法参数:
<h1><?php echo get_the_title() ?></h1> <div class="breadcrumb"> <a href="<?php echo get_home_url(); ?>">Home</a> <span> > </span> <?php // 归档页逻辑 if (is_archive()) { echo '<span>'.get_the_archive_title().'</span>'; } // 单文章页逻辑 elseif (is_singular('post')) { // 获取当前文章所属的第一个分类,可自行调整排序规则 $categories = get_the_category(); $first_cat = $categories[0] ?? ''; if ($first_cat) { echo '<a href="'.get_category_link($first_cat->term_id).'">'.$first_cat->name.'</a>'; echo '<span> > </span>'; } echo '<span>'.get_the_title().'</span>'; } // 普通页面逻辑 else { echo '<span>'.get_the_title().'</span>'; } ?> </div>
额外说明
如果你的站点用了自定义文章类型或者自定义分类法,只需要把is_singular('post')里的post换成对应的自定义文章类型别名,get_the_category()换成对应的get_the_terms( get_the_ID(), '自定义分类法别名' )即可。
如果要自定义归档标题的前缀(比如默认的「分类:XX」要去掉前缀),可以在主题functions.php里加下面的过滤钩子,不需要改核心函数:
add_filter( 'get_the_archive_title', function ($title) { if ( is_category() ) { $title = single_cat_title( '', false ); } elseif ( is_tag() ) { $title = single_tag_title( '', false ); } elseif ( is_author() ) { $title = '<span class="vcard">' . get_the_author() . '</span>'; } elseif ( is_post_type_archive() ) { $title = post_type_archive_title( '', false ); } elseif ( is_tax() ) { $title = single_term_title( '', false ); } return $title; });
内容的提问来源于stack exchange,提问作者Yusuf ElNu'man
相关产品推荐
相关产品推荐

