Link to a Page Rather Than the Category Archive in a Breadcrumb

A topic that frequently comes up in the support forums is how to have a breadcrumb representing a category link to a Page (instance of the Page post type) rather than a category archive. Since this is not natively supported by WordPress, Breadcrumb NavXT does not natively support it. However, there is a filter that can facilitate this behavior.

The presented solution is a simplistic example for a single category. However, it can be extended for multiple categories, or taxonomy terms. Finally, rather than being hard-coded, the IDs could come from a term_meta field.

The Code

add_filter('bcn_breadcrumb_url', 'my_breadcrumb_url_changer', 3, 10);
function my_breadcrumb_url_changer($url, $type, $id)
{
	if(in_array('category', $type) && (int) $id === MYCATID)
	{
		$url = get_permalink(PAGEID);
	}
	return $url;
}

After placing this code into your site specific plugin, you will need to update two portions of it. Replace MYCATID with the ID of the category you want to change the link on, and replace PAGEID with the page you wish for the breadcrumb to link to. That’s it. Simple, right?

-John Havlik

[end of transmission, stay tuned]

Using bcn_display() and bcn_display_list()

bcn_display is the main display function for Breadcrumb NavXT. It will generate a breadcrumb trail for the current page (resource, not post type). The following is the function’s prototype

bcn_display($return = false, $linked = true, $reverse = false, $force = false)
  • $return the first parameter, it is a boolean and controls whether or not the breadcrumb trail is returned or echoed. Set to true to return the assembled breadcrumb trail string. It defaults to false if no value is passed in.
  • $linked the second parameter, it is a boolean and controls whether or not the breadcrumbs in the breadcrumb trail are linked (if anchors are generated or not). Set to false to get a string without anchors. It defaults to true if no value is passed in.
  • $reverse the third parameter, it is a boolean and controls the order the breadcrumbs are arranged within the trail. Set to true to have the current item’s breadcrumb show up first in the breadcrumb trail (this is revered of the normal behavior). It defaults to false if no value is passed in.
  • $force the fourth parameter, it is a boolean and controls whether or not generation of the breadcrumb trail should be forced (e.g. should the internal caching mechanism be bypassed). It defaults to false if no value is passed in. This parameter was introduced in Breadcrumb NavXT 5.6.0.

bcn_display_list() accepts the same parameters as bcn_display(). The difference is in how the breadcrumb trail is assembled. bcn_display() places a breadcrumb separator between breadcrumbs in the trail. bcn_display_list() wraps each breadcrumb with <li> tags.

Related Articles

Updated:

Using the Widget

Since version 3.0.0, Breadcrumb NavXT has shipped with a built in WordPress sidebar widget. In Breadcrumb NavXT version 3.5.0 the included widget was rewritten and is multi instance capable. The widget allows you to place a breadcrumb trail in your theme without touching any of your theme’s files. Since Breadcrumb NavXT has a two different display functions (bcn_display() and bcn_display_list()), along with three input variables for these functions ($return, $linked, $reverse), the widget has a few settings available to the user.

Currently, the following settings are available:

  • A field to enter a title for the output widget, this works just like the title on any other widget.
  • Whether to output the trail as a list or not. If checked, the output trail will be placed in an unordered list, with each breadcrumb belonging to its own list element.
  • Whether to link the breadcrumbs or not. If checked (default), each of the breadcrumbs in the breadcrumb trail will have a hyperlink.
  • Whether to reverse the order of the trail or not. If checked, the breadcrumb trail will be output in reverse order (the leftmost breadcrumb (or first breadcrumb in a list output) will be the breadcrumb for current page).
  • Whether to hide the trail on the front page or not. If checked, the breadcrumb trail for the front page of your site will not be displayed (e.g. when is_front_page() evaluates to true).

The widget still uses the settings values specified in the Breadcrumb NavXT settings page to define its behavior while filling the breadcrumb trail.

Add a Static Breadcrumb to the Breadcrumb Trail

In some cases WordPress may be not be running your entire site. In these instances, there may be a root above what WordPress knows about. To add a breadcrumb to represent this, you have two options.

  1. Breadcrumb NavXT Menu Magic can be used. You will need to have a ‘custom item’ menu entry that represents this off WordPress resource and is the root to all of the other menu entries.
  2. Write a little code in a site specific plugin.

The Code

The Menu Magic method is neat and does not require any code writing. However, that’s not what this article is really about. Besides, the required code is quite simple. The following code just needs to be placed in a site specific plugin (or your theme’s functions.php if that floats your boat):

add_action('bcn_after_fill', 'my_static_breadcrumb_adder');
function my_static_breadcrumb_adder($breadcrumb_trail)
{
    $breadcrumb_trail->add(new bcn_breadcrumb('STATIC_TITLE', NULL, array('home'), 'STATIC_URL', NULL, true));
}

After placing this code into your site specific plugin, you will need to update two portions of it. Replace STATIC_TITLE with the title of the resource this breadcrumb represents, and replace STATIC_URL with the URL to the resource represented by this breadcrumb. That’s it. Simple, right?

-John Havlik

[end of transmission, stay tuned]

bcn_add_post_type_arg

This filter is applied within the breadcrumb_navxt_trail class in the maybe_add_post_type_arg() function. This filter was introduced in version 5.4. It receives three parameters:

  • $add_query_arg(boolean)(required) The boolean decision whether or not to add the post type query argument to the URL to filter
  • $type(string)(optional) The name of the post type that is under consideration for addition to the URL
  • $taxonomy(string|NULL)(optional) The taxonomy name for the archive in question (may be null)

Related Articles

Updated: