Breadcrumb NavXT 7.1.0处理GET请求生成多余子段问题咨询
问题
我在网站上使用Breadcrumb NavXT 7.1.0插件,在“新闻”板块实现了AJAX筛选:访问类似mysite.com/news/?country=turkey的链接时,页面仅显示土耳其相关新闻,面包屑路径为首页 | 新闻。
相关代码:
/* frontend */ $(document).ready(function() { let slug = window.location.href.split('=').pop(); $.ajax({ cashe: false, method: 'post', url: '<?php echo get_template_directory_uri(); ?>/news-ajax-sort.php', data: slug, success: function(data) { $('.all-news-wrap').append(data); } }); })
/* backend */ $keys = array_keys($_POST); $newsslug = $keys[0]; if(isset($newsslug)) { $news_args = array( 'post_type' => 'news', 'posts_per_page' => 100, 'tax_query' => array( array( 'taxonomy' => 'country_news', 'field' => 'slug', 'terms' => $newsslug ) ) ); } else { $news_args = array( 'post_type' => 'news', 'posts_per_page' => 100 ); } //here is the standard wordpress loop
之后我创建了实现逻辑完全相同的“活动”板块,仅将AJAX筛选条件改为按年份筛选,Breadcrumb NavXT设置也一致。但访问类似mysite.com/events/?years=2023的链接时,面包屑路径变为首页 | 活动 | 2023,多出了不必要的子段。我曾尝试将参数值改为events2023,但面包屑仍显示首页 | 活动 | events2023,问题未解决。
请问为何实现完全相同的两个板块,插件处理方式不同?插件如何根据GET请求生成子段,该如何干预?
解答
一、两个板块处理不同的原因
Breadcrumb NavXT会自动扫描URL中的GET参数,匹配WordPress内置查询变量或已注册的自定义分类法:
- 新闻板块用的
country参数,不属于插件识别的内置/关联变量,所以不会额外生成面包屑子项; - 活动板块的
years参数和WordPress内置的year日期归档查询变量高度相似,插件误判这是一个归档类参数,自动把参数值作为子项添加到面包屑里——哪怕改参数值,只要参数名是years,插件的识别逻辑依然会触发。
二、插件处理GET请求生成子段的逻辑
Breadcrumb NavXT核心依赖WordPress的查询对象($wp_query)解析页面上下文,处理GET参数时会按以下顺序判断:
- 检查参数是否匹配WordPress内置查询变量(比如
year、category、tag等); - 检查参数是否匹配已注册的自定义分类法的查询变量;
- 只要匹配成功,就会自动生成对应面包屑子项,将参数值作为子项文本。
三、干预解决的两种方法
方法1:修改GET参数名
把活动板块的参数名从years改成插件不会识别的名称(比如event_year),彻底避开插件的自动识别逻辑:
- 前端AJAX的参数获取逻辑要对应调整;
- 后端
$_POST的参数读取代码也要同步修改。
方法2:用插件钩子过滤面包屑
如果不想改参数名,可通过Breadcrumb NavXT提供的bcn_breadcrumb_trail钩子,手动移除多余的面包屑子项:
add_filter('bcn_breadcrumb_trail', 'remove_unwanted_event_breadcrumb', 10, 1); function remove_unwanted_event_breadcrumb($trail) { // 判断当前是否在活动归档页,且存在years参数 if(is_post_type_archive('events') && isset($_GET['years'])) { // 移除最后一个面包屑子项(即多余的年份段) array_pop($trail->breadcrumbs); } return $trail; }
将这段代码添加到主题的functions.php文件即可生效。
内容的提问来源于stack exchange,提问作者Danila
相关产品推荐
相关产品推荐

