Breadcrumbs for Taxonomy Pages

Taken from Bill Ericson: http://www.billerickson.net/wordpress-taxonomy-breadcrumbs/

This post has been marked as old. The code might no longer work. Comments have been disabled as this is no longer maintained. Use the search on the right to find a newer tutorial.

I’m working on a project right now that uses hierarchical taxonomies, and the client requested a breadcrumb along the top. I searched online but couldn’t find any good existing plugins, so thought I’d write my own.

Note: This was built for WordPress 3.03. WordPress 3.1 (hopefully coming out this month) will add a lot of features to taxonomies, including hierarchical URLs. This solution is NOT designed for hierarchical URLs. If you read through the code you’ll see I’m assembling them with 3 things:

  • bloginfo('url') – This is the URL for your site
  • $item->taxonomy – This is the name of the taxonomy the term is in
  • $item->name – This is the name of the taxonomy term

Since WordPress doesn’t currently support hierarchical URLs for taxonomies, no matter how deep your term is it will still have the url structure of yoursite.com/taxonomy-name/taxonomy-term. Hopefully 3.1 will give us a URL from get_term_by(), but it doesn’t now, which is why I did it this way.

With that said, here’s the code. Place this in your functions.php file (or custom_functions.php for Thesis):

<div id="LC1"><?php</div>
<div id="LC2">/* Taxonomy Breadcrumb */</div>
<div id="LC3">function be_taxonomy_breadcrumb() {</div>
<div id="LC4">// Get the current term</div>
<div id="LC5">$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );</div>
<div id="LC6"></div>
<div id="LC7">// Create a list of all the term's parents</div>
<div id="LC8">$parent = $term->parent;</div>
<div id="LC9">while ($parent):</div>
<div id="LC10">$parents[] = $parent;</div>
<div id="LC11">$new_parent = get_term_by( 'id', $parent, get_query_var( 'taxonomy' ));</div>
<div id="LC12">$parent = $new_parent->parent;</div>
<div id="LC13">endwhile;</div>
<div id="LC14">if(!empty($parents)):</div>
<div id="LC15">$parents = array_reverse($parents);</div>
<div id="LC16"></div>
<div id="LC17">// For each parent, create a breadcrumb item</div>
<div id="LC18">foreach ($parents as $parent):</div>
<div id="LC19">$item = get_term_by( 'id', $parent, get_query_var( 'taxonomy' ));</div>
<div id="LC20">$url = get_bloginfo('url').'/'.$item->taxonomy.'/'.$item->slug;</div>
<div id="LC21">echo '<li><a href="'.$url.'">'.$item->name.'</a></li>';</div>
<div id="LC22">endforeach;</div>
<div id="LC23">endif;</div>
<div id="LC24"></div>
<div id="LC25">// Display the current term in the breadcrumb</div>
<div id="LC26">echo '<li>'.$term->name.'</li>';</div>
<div id="LC27">}</div>

To use it in your theme, simply call be_taxonomy_breadcrumb() within a <ul>

Revisions

Tags: ,

No comments yet.

Leave a Reply