For a long time I have been using the following code to produce breadcrumbs in my theme. I use it because I do not like being dependent on plugins for basic functions.
// Breadcrumbs
function limelight_breadcrumbs()
{
$delimiter = ' > ';
//text for the 'Home' link
$name = __("Home", "limelight");
$currentBefore = ' <span class="current">';
$currentAfter = '</span> ';
if (!is_home() && !is_front_page() || is_paged()) {
echo '<nav id="breadcrumbs">';
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 . single_cat_title() . $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_attachment()) {
echo $currentBefore;
the_title();
$currentAfter;
} elseif (get_post_type()) {
$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
echo $currentBefore . $term->name . $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 . get_search_query() . $currentAfter;
} elseif (is_tag()) {
echo $currentBefore . single_tag_title() . $currentAfter;
} elseif (is_author()) {
global $author;
$userdata = get_userdata($author);
echo $currentBefore . $userdata->display_name . $currentAfter;
} elseif (is_404()) {
echo $currentBefore . '404 Not Found' . $currentAfter;
}
if (get_query_var('paged')) {
if (is_home() || is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author())
echo $currentBefore;
echo __('Page','limelight') . ' ' . get_query_var('paged');
if (is_home() || is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author())
echo $currentAfter;
}
echo '</nav>';
}
}
However I now have need for custom post types, and this function can't cope with them. I have searched high and low, and nowhere can I find a complete answer as to how to fix this code to work with custom post types. Most replies are non helpful "use such and such plugin" variety.
I have dug through a few breadcrumb plugins that do work with custom post types in hopes of discovering how to apply it to my own code, but to no avail.
I would be greatly appreciative if someone modified my above code to work with custom post types. I know it must be fairly simple, but with my very rudimentary knowledge of PHP I just can't figure it out.