While Breadcrumb NavXT for some time has provided methods for generating JSON-LD formatted BreadcrumbLists, the use of non-hierarchical taxonomies within a breadcrumb trail may result in non-compliant breadcrumb trails. For the case of a post only being a member of a single term within a non-hierarchical taxonomy, since Breadcrumb NavXT 6.4, compliant JSON-LD is generated. However, when a post is a member of multiple non-hierarchical terms within the same taxonomy, we run into problems.
When using the normal display functions, all of the terms in the non-hierarchical taxonomy that the post is a member of will be displayed, separated by commas. This behavior has been more-or-less the same since support for tags was added in 2.1.0. In essence, when there are multiple terms, there is a second dimension to the breadcrumb trail for that specific breadcrumb.
Unfortunately, it does not appear that Schema.org BreadcrumbList has the facility to support multi-dimensional breadcrumbs. Hence, a single term needs to be selected when there are multiple for a post. Luckily, the bcn_post_terms
filter can be used to do this.
The Code
Introduced in Breadcrumb NavXT 5.4, bcn_post_terms
allows us to filter out all of the terms returned by post_terms()
. In this case, only the first term is wanted.
add_filter('bcn_post_terms','my_bcn_post_term_selector', 10, 3);
function my_bcn_post_term_selector($terms, $taxonomy, $id)
{
//Check to ensure the terms list is an array and there is more than one item in it
if(is_array($terms) and count($terms) > 1)
{
//Return the fist item in a new array
return array(0 => reset($terms));
}
return $terms;
}
To get started quickly, just copy and paste the above code into a site specific plugin and start playing.
Note: This code relies on behavior introduced in Breadcrumb NavXT 6.4 and will not work in prior versions.
-John Havlik