Non-Hierarchical Taxonomies and JSON-LD Compatibility

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) && 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