面包屑未显示自定义类别帖子类型

时间:2014-08-29 作者:Nsokyi

当我在页面上的面包屑菜单中显示自定义帖子类型类别时,我遇到了一个问题,它看起来如下所示

主页//帖子标题

应该是什么时候

主页/自定义猫名/帖子标题

它显示页面上的帖子和帖子标题,但不显示类别?

面包屑菜单代码:

            /*********************
            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>\';
            }
谢谢

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我仍然不能百分之百确定需要在何处以及显示什么。

如果需要显示当前单个帖子的类别,则需要使用get_the_category 代替the_categorythe_category 需要在循环内调用。您可以使用get_the_category 如下(记住使用global $post 检索帖子ID)

<?php
global $post;
$categories = get_the_category($post->ID);
var_dump($categories);
?>
如果需要在类别页面上获取类别名称,可以使用get_query_var(\'cat\') 检索有关当前类别页的信息。

下面是我在网站上使用的面包屑示例。

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; 
注意:我从一两年前的某个地方复制了这个函数,但没有添加作者信用(糟糕的我),所以我记不起最初的作者是谁。如果你,作者,看到这篇文章,请回复,这样我就可以给你加上满分了

结束

相关推荐

Breadcrumbs - get the author?

我有自己的函数breadcrumbs()。在其中,我调用is\\u author()来确定我是否在作者页面上。如果是真的,我想知道我在哪个作者的页面上。我尝试了\\u author(),但没有结果。我还查阅了WP codex。有人能帮忙吗?