使用Breadcrumb NavXT和Filter Everything时面包屑Schema.org数据名称异常
问题核心是你创建自定义面包屑时参数设置不正确,导致Breadcrumb NavXT生成Schema.org数据时无法正确识别新增/替换的面包屑项。以下是修正后的代码及说明:
修正后的代码
add_action('bcn_after_fill', 'my_static_breadcrumb_adder'); function my_static_breadcrumb_adder($breadcrumb_trail) { $output = flrt_selected_filter_terms(); // 无选中筛选器时直接返回 if (empty($output)) { return; } $taxonomy_key = array_keys($output)[0]; $term_slug = $output[$taxonomy_key]["values"][0]; $term = get_term_by('slug', $term_slug, 'product_cat'); // 分类不存在时直接返回 if (!$term) { return; } $term_name = $term->name; $term_link = get_term_link($term); // 用WordPress内置函数获取分类链接,避免手动拼接出错 // 遍历面包屑数组,替换原有的'E-SHOP'项 foreach ($breadcrumb_trail->breadcrumbs as $key => $crumb) { if ($crumb->get_title() === 'E-SHOP') { $breadcrumb_trail->breadcrumbs[$key] = new bcn_breadcrumb( $term_name, NULL, array('term', 'product-cat'), // 设置分类相关的CSS类,帮助Schema识别 $term_link, 'item', // 指定item类型,对应Schema的ListItem true ); break; } } // 如果你是要插入新面包屑而非替换,使用下面的代码(注释掉上面的替换逻辑) // array_splice($breadcrumb_trail->breadcrumbs, -4, 0, array( // new bcn_breadcrumb( // $term_name, // NULL, // array('term', 'product-cat'), // $term_link, // 'item', // true // ) // )); }
关键修正点
- 修正面包屑类参数:原代码中错误使用
array('home')作为CSS类,导致面包屑被识别为首页项,现在改为array('term', 'product-cat'),让Breadcrumb NavXT正确识别这是一个分类面包屑。 - 使用内置函数生成链接:用
get_term_link()替代手动拼接链接,避免因URL结构变化导致的链接错误,同时符合WordPress规范。 - 增加异常判断:添加空值和分类不存在的判断,避免出现PHP报错。
- 精准替换原有项:遍历面包屑数组找到'E-SHOP'项并替换,确保Schema中对应的
itemListElement->name同步更新为分类名称;如果需要插入新项,修正参数后保留splice逻辑即可。
内容的提问来源于stack exchange,提问作者fesarlis
相关产品推荐
相关产品推荐

