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

bcn_breadcrumb_linked

This filter is applied within the bcn_breadcrumb class in the set_linked member function before setting the internal $linked property. This filter was introduced in 6.5. It receives three parameters:

  • $linked(bool)(required) Whether or not the breadcrumb is linked
  • $type(array)(optional) The array of type strings for the breadcrumb
  • $id(int|NULL)(optional) The ID of the resource represented by the breadcrumb, will be NULL if no suitable ID exists

Related Articles

Updated:

bcn_show_type_term_archive

This filter is applied within the breadcrumb_navxt_trail class in the type_archive() function. This filter was introduced in version 6.4. It receives two parameters:

  • $display(boolean)(required) Whether or not to add the post type (filterable via bcn_type_archive_post_type) archive breadcrumb to the breadcrumb trail for term archives
  • $taxonomy(string)(optional) The name of the taxonomy for term archive the breadcrumb trail is being generated for

Updated:

bcn_show_post_private

This filter is applied within the bcn_breadcrumb_trail class in the post_parents() and do_post()functions. This filter is intended to allow users to override the default behavior of Breadcrumb NavXT to include private posts in the breadcrumb trail of their published children. This filter was introduced in version 6.4. It receives two parameters:

  • $display(boolean)(required) Whether or not the post specified in the second parameter is to be included in the breadcrumb trail
  • $ID(integer)(optional) The ID of the post in question

Related Articles

Breadcrumb NavXT Multidimension Extensions 2.5.3

Announcing the immediate availability of Breadcrumb NavXT Multidimension Extensions 2.5.3. This version improves compatibility with the upcoming Breadcrumb NavXT 6.3. Changes in Breadcrumb NavXT 6.3’s setting page results in older versions of Breadcrumb NavXT Multidimension Extensions producing a blank settings tab.

You can grab Breadcrumb NavXT Multidimension Extensions from the WordPress.org plugin repository.