Home  //  Blog  //  WordPress Functions  //  Customizable WordPress Breadcrumb Function to Replace Plugins

Customizable WordPress Breadcrumb Function to Replace Plugins

Posted on August 1, 2010 in WordPress Functions

In the past I’ve relied on a plugin to handle the breadcrumbs throughout the sites I’ve built. In a effort to reduce the amount of plugins I use regular and replace them with functions I came across a simple to implement, easy to update function that does exactly what I need. First, paste the following code into your template file(s) in the area you want your breadcrumbs to appear:

<?php if (function_exists('dimox_breadcrumbs')) dimox_breadcrumbs(); ?>

Next, we take the following code and paste it into your functions.php file. The areas you would want to consider changing to customize the output on the front end of your site have been commented throughout.

function dimox_breadcrumbs() {
 
  $delimiter = '&raquo;'; // change the dividers
  $name = 'Home'; // change the 'Home' link
  $currentBefore = '<span class="current">';
  $currentAfter = '</span>';
 
  if ( !is_home() && !is_front_page() || is_paged() ) {
 
    echo '
<div id="crumbs">';
 
    global $post;
    $home = get_bloginfo('url');
    echo '<a href="' . $home . '">' . $name . '</a> ' . $delimiter . ' ';
 
    if ( is_category() ) {
      global $wp_query;
      $cat_obj = $wp_query->get_queried_object();
      $thisCat = $cat_obj->term_id;
      $thisCat = get_category($thisCat);
      $parentCat = get_category($thisCat->parent);
      if ($thisCat->parent != 0) echo(get_category_parents($parentCat, TRUE, ' ' . $delimiter . ' '));
      echo $currentBefore . 'Archive by category &#39;'; // change the archives prefix
      single_cat_title();
      echo '&#39;' . $currentAfter;
 
    } elseif ( is_day() ) {
      echo '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $delimiter . ' ';
      echo '<a href="' . get_month_link(get_the_time('Y'),get_the_time('m')) . '">' . get_the_time('F') . '</a> ' . $delimiter . ' ';
      echo $currentBefore . get_the_time('d') . $currentAfter;
 
    } elseif ( is_month() ) {
      echo '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $delimiter . ' ';
      echo $currentBefore . get_the_time('F') . $currentAfter;
 
    } elseif ( is_year() ) {
      echo $currentBefore . get_the_time('Y') . $currentAfter;
 
    } elseif ( is_single() ) {
      $cat = get_the_category(); $cat = $cat[0];
      echo get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
      echo $currentBefore;
      the_title();
      echo $currentAfter;
 
    } elseif ( is_page() && !$post->post_parent ) {
      echo $currentBefore;
      the_title();
      echo $currentAfter;
 
    } elseif ( is_page() && $post->post_parent ) {
      $parent_id  = $post->post_parent;
      $breadcrumbs = array();
      while ($parent_id) {
        $page = get_page($parent_id);
        $breadcrumbs[] = '<a href="' . get_permalink($page->ID) . '">' . get_the_title($page->ID) . '</a>';
        $parent_id  = $page->post_parent;
      }
      $breadcrumbs = array_reverse($breadcrumbs);
      foreach ($breadcrumbs as $crumb) echo $crumb . ' ' . $delimiter . ' ';
      echo $currentBefore;
      the_title();
      echo $currentAfter;
 
    } elseif ( is_search() ) {
      echo $currentBefore . 'Search results for &#39;' . get_search_query() . '&#39;' . $currentAfter; // change the search results prefix & suffix
 
    } elseif ( is_tag() ) {
      echo $currentBefore . 'Posts tagged &#39;'; // change the post tag prefix & suffix
      single_tag_title();
      echo '&#39;' . $currentAfter;
 
    } elseif ( is_author() ) {
       global $author;
      $userdata = get_userdata($author);
      echo $currentBefore . 'Articles posted by ' . $userdata->display_name . $currentAfter;
 
    } elseif ( is_404() ) {
      echo $currentBefore . 'Error 404' . $currentAfter; // change the 404 text
    }
 
    if ( get_query_var('paged') ) {
      if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ' (';
      echo __('Page') . ' ' . get_query_var('paged');
      if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ')';
    }
 
    echo '</div>
 
';
 
  }
}

Let's Get Social

Use these icons to share this post with friends and colleagues on various social media avenues.

Seems that there are no comments on this post yet. Be the first to have your say!

Submit Your Comment

Please leave a comment by filling out the form below. Comment must be approved before it becomes visible.

Your Comment

Note: You may use these HTML tags and attributes within your comment: <a href="" title="">, <em>, <strong>. To start a new paragraph, make sure you have a full line space between them using two returns.

© Troy Chaplin 2010  //  Site built using a Macbook Pro, Coda and Photoshop and is proudly powered by WordPress