0

I have an issue when it come to displaying the custom post type category in my breadcrumb menu on the page it looks something like the following

Home / / Post Title

when it should be

Home / Custom Cat Name / Post Title

It shows the post on the page and the posts title but not the category?

Breadcrumb menu code:

            /*********************
            breadcrumbs menu
            *********************/
            function the_breadcrumb(){
                echo '<ul class="crumbs">';
                if (!is_home()){
                    echo '<li><a href="';
                    echo get_option('home');
                    echo '">';
                    echo 'Home';
                    echo '</a></li><li class="separator"> &#124; </li>';
                    if (is_category() || is_single('post')){
                        echo '<li>';
                        the_category(' </li><li class="separator"> &#124; </li><li> ');
                        if (is_single()){
                            echo '</li><li class="separator"> &#124; </li><li>';
                            the_title();
                            echo '</li>';
                        }
                    } elseif (is_page()){
                        echo '<li>';
                        echo the_title();
                        echo '</li>';
                    }
                }
                elseif (is_tag()){
                    single_tag_title();
                }
                elseif (is_day()){
                    echo"<li>Archive for "; the_time('F jS, Y'); echo'</li>';
                }
                elseif (is_month()){
                    echo"<li>Archive for "; the_time('F, Y'); echo'</li>';
                }
                elseif (is_year()){
                    echo"<li>Archive for "; the_time('Y'); echo'</li>';
                }
                elseif (is_author()){
                    echo"<li>Author Archive"; echo'</li>';
                }
                elseif (isset($_GET['paged']) && !empty($_GET['paged'])){
                    echo "<li>Blog Archives"; echo'</li>';
                }
                elseif (is_search()){
                    echo"<li>Search Results"; echo'</li>';
                }
                echo '</ul>';
            }

Thanks

6
  • Please properly intend your code, you making it very difficult for others who might be able to help you to read and keep track of your code Aug 29, 2014 at 10:19
  • Sorry, edited it now
    – Nsokyi
    Aug 29, 2014 at 10:30
  • On a sidenote, I think is_single('post') should actually be is_singular('post') - is_single() Codex and is_singular() Codex
    – Howdy_McGee
    Aug 29, 2014 at 13:58
  • Are you using build in categories or an custom taxonomy. See here Do you need to display the category/term assigned to the post in single view and/or do you need to show the category/taxonomy/term name on the category/taxonomy page Aug 30, 2014 at 5:59
  • Just another thing, the_category won't work outside the loop. You should look at get_the_category instead Aug 30, 2014 at 6:59

1 Answer 1

1

I'm still not one hundred percent sure where and what needs to be displayed.

If you need to show the current single post's category, you'll need to use get_the_category in stead of the_category as the_category needs to be called inside the loop. You can use get_the_category as follow (Remember to use the global $post to retrieve the post ID)

<?php
global $post;
$categories = get_the_category($post->ID);
var_dump($categories);
?>

If you need to get the category name on a category page, you can use get_query_var('cat') to retrieve info about the current category page.

Here is an example of the breadcrumbs that I use on my site.

if ( ! function_exists( 'pietergoosen_breadcrumbs' ) ) :

    function pietergoosen_breadcrumbs() {
          /* === OPTIONS === */
        $text['home']     = _x( 'Home', 'Home', 'pietergoosen' ); // text for the 'Home' link
     $text['category'] = __( 'Archive by Category "%s"', 'pietergoosen' );  // text for a category page
     $text['search']   = __( 'Search Results for "%s" Query', 'pietergoosen' ); // text for a search results page
     $text['tag']      = __( 'Posts Tagged "%s"', 'pietergoosen' );  // text for a tag page
     $text['author']   = __( 'Posts Posted by %s', 'pietergoosen' ); // text for an author page
     $text['404']      = __( 'Error 404', 'pietergoosen' );  // text for the 404 page

     $show_current   = 1; // 1 - show current post/page/category title in breadcrumbs, 0 - don't show
     $show_on_home   = 0; // 1 - show breadcrumbs on the homepage, 0 - don't show
     $show_home_link = 1; // 1 - show the 'Home' link, 0 - don't show
     $show_title     = 1; // 1 - show the title for the links, 0 - don't show
     $delimiter      = ' &raquo; '; // delimiter between crumbs
     $before         = '<span class="current">'; // tag before the current crumb
     $after          = '</span>'; // tag after the current crumb
     /* === END OF OPTIONS === */

     global $post;
        $here_text    = __('You are currently here! &nbsp;&raquo;&nbsp;', 'pietergoosen');
     $home_link    = home_url('/');
     $link_before  = '<span typeof="v:Breadcrumb">';
     $link_after   = '</span>';
     $link_attr    = ' rel="v:url" property="v:title"';
     $link         = $link_before . '<a' . $link_attr . ' href="%1$s">%2$s</a>' . $link_after;
        if (isset($post)){
            $parent_id    = $parent_id_2  = $post->post_parent;
        }
     $frontpage_id = get_option('page_on_front');

     if (is_home() || is_front_page()) {

            if ($show_on_home == 1) echo '<div class="breadcrumb"><a href="' . $home_link . '">' . $text['home'] . '</a></div>';

        } else {

         echo '<div class="breadcrumb">';
         if ($show_home_link == 1) {
             echo  $here_text . '<a href="' . $home_link . '" rel="v:url" property="v:title">' . $text['home'] . '</a>';
             if ($frontpage_id == 0 || $parent_id != $frontpage_id) echo $delimiter;
         }

         if ( is_category() ) {
             $this_cat = get_category(get_query_var('cat'), false);
             if ($this_cat->parent != 0) {
                 $cats = get_category_parents($this_cat->parent, TRUE, $delimiter);
                 if ($show_current == 0) $cats = preg_replace("#^(.+)$delimiter$#", "$1", $cats);
                 $cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats);
                 $cats = str_replace('</a>', '</a>' . $link_after, $cats);
                 if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats);
                 echo $cats;
             }
                if ($show_current == 1) echo $before . sprintf($text['category'], single_cat_title('', false)) . $after;

          } elseif ( is_search() ) {
              echo $before . sprintf($text['search'], get_search_query()) . $after;

          } elseif ( is_day() ) {
             echo sprintf($link, get_year_link(get_the_time('Y')), get_the_time('Y')) . $delimiter;
             echo sprintf($link, get_month_link(get_the_time('Y'),get_the_time('m')), get_the_time('F')) . $delimiter;
             echo $before . get_the_time('d') . $after;

         } elseif ( is_month() ) {
             echo sprintf($link, get_year_link(get_the_time('Y')), get_the_time('Y')) . $delimiter;
             echo $before . get_the_time('F') . $after;

          } elseif ( is_year() ) {
              echo $before . get_the_time('Y') . $after;

          } elseif ( is_single() && !is_attachment() ) {
                if ( get_post_type() != 'post' ) {
                    $post_type = get_post_type_object(get_post_type());
                    $slug = $post_type->rewrite;
                    printf($link, $home_link . '/' . $slug['slug'] . '/', $post_type->labels->singular_name);
                    if ($show_current == 1) echo $delimiter . $before . get_the_title() . $after;
                } else {
                    $cat = get_the_category(); $cat = $cat[0];
                    $cats = get_category_parents($cat, TRUE, $delimiter);
                    if ($show_current == 0) $cats = preg_replace("#^(.+)$delimiter$#", "$1", $cats);
                    $cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats);
                    $cats = str_replace('</a>', '</a>' . $link_after, $cats);
                    if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats);
                    echo $cats;
                    if ($show_current == 1) echo $before . get_the_title() . $after;
                }

         } elseif ( !is_single() && !is_page() && get_post_type() != 'post' && !is_404() ) {
             $post_type = get_post_type_object(get_post_type());
             echo $before . $post_type->labels->singular_name . $after;

         } elseif ( is_attachment() ) {
               $parent = get_post($parent_id);
                $cat = get_the_category($parent->ID); $cat = $cat[0];
                $cats = get_category_parents($cat, TRUE, $delimiter);
                $cats = str_replace('<a', $link_before . '<a' . $link_attr, $cats);
                $cats = str_replace('</a>', '</a>' . $link_after, $cats);
                if ($show_title == 0) $cats = preg_replace('/ title="(.*?)"/', '', $cats);
                echo $cats;
              printf($link, get_permalink($parent), $parent->post_title);
              if ($show_current == 1) echo $delimiter . $before . get_the_title() . $after;

            } elseif ( is_page() && !$parent_id ) {
                if ($show_current == 1) echo $before . get_the_title() . $after;

            } elseif ( is_page() && $parent_id ) {
                if ($parent_id != $frontpage_id) {
                    $breadcrumbs = array();
                    while ($parent_id) {
                        $page = get_page($parent_id);
                        if ($parent_id != $frontpage_id) {
                            $breadcrumbs[] = sprintf($link, get_permalink($page->ID), get_the_title($page->ID));
                        }
                        $parent_id = $page->post_parent;
                    }
                   $breadcrumbs = array_reverse($breadcrumbs);
                   for ($i = 0; $i < count($breadcrumbs); $i++) {
                       echo $breadcrumbs[$i];
                       if ($i != count($breadcrumbs)-1) echo $delimiter;
                   }
              }
             if ($show_current == 1) {
                 if ($show_home_link == 1 || ($parent_id_2 != 0 && $parent_id_2 != $frontpage_id)) echo $delimiter;
                 echo $before . get_the_title() . $after;
             }

          } elseif ( is_tag() ) {
             echo $before . sprintf($text['tag'], single_tag_title('', false)) . $after;

          } elseif ( is_author() ) {
               global $author;
               $userdata = get_userdata($author);
              echo $before . sprintf($text['author'], $userdata->display_name) . $after;

           } elseif ( is_404() ) {
               echo $before . $text['404'] . $after;
           }

          if ( get_query_var('paged') ) {
              if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ' (';
             echo __('&nbsp;&raquo;&nbsp; Page', 'pietergoosen') . ' ' . get_query_var('paged');
             if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ')';
         }

           echo '</div><!-- .breadcrumbs -->';

        }
    }

endif; 

NOTE: I've copied this function from somewhere a year or two ago without adding author credit (bad me), so I can't remember who the original author was. If you, the author, see this post, please reply so that I can add full credit to you)

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.