Wordpress breadcrumb depth

时间:2014-04-05 作者:Malou

我目前正在使用下面的代码显示我的面包屑。这在一定程度上是可行的。我想要的是:

主页>级别1>级别2>级别3

我得到的是:

主页>级别1>级别3

它显示的是一位家长,所以只要你最深的链接是2级链接,你就无法区分两者之间的区别。但你知道,对于复杂的网站来说,这还不够。

欢迎就如何调整此代码以包括所有家长提出建议。

代码:

function themename_breadcrumb() {
        global $post;

        echo \'<ul class="breadcrumbs">\';
    if (!is_home()) {
        echo \'<li><a href="\';
        echo get_option(\'home\');
        echo \'">\';
        echo \'Home\';
        echo "</a></li>";
        if (is_category() || is_single()) {
            echo \'<li>\';
            the_category(\' </li><li> \');
            if (is_single()) {
                echo "</li><li>";
                the_title();
                echo \'</li>\';
            }
        } elseif (is_page()) {
            if($post->post_parent){
                $anc = get_post_ancestors( $post->ID );
                $anc_link = get_page_link( $post->post_parent );

                foreach ( $anc as $ancestor ) {
                    $output = "<li><a href=" . $anc_link . ">" . get_the_title( $ancestor ) . "</a>";
                }

                echo $output;
                    echo \'</li><li> \';
                    echo the_title();
                    echo \'</li>\';

                } else {
                    echo \'</li><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>\';
}

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

以更简洁的方式做同样的事情:

function breadcrump_page( $post ) {
  $format = \'<a href="%s" title="%s">%s</a> &gt;\';    
  $anc = array_map( \'get_post\', array_reverse( (array) get_post_ancestors( $post ) ) );
  $links = array_map( \'get_permalink\', $anc );
  foreach ( $anc as $i => $apost ) {
    $title = apply_filters( \'the_title\', $apost->post_title );
    printf( $format, $links[$i], esc_attr($title), esc_html($title) );
  }
  echo apply_filters( \'the_title\', $post->post_title );
}

global $post;
if ( $post->post_parent ) breadcrump_page( $post );
WordPress有一个核心功能get_post_ancestors 检索分层发布的所有父ID。我将其命名为,颠倒顺序,因为它们是从直接父级返回到最高祖先的,最后使用几个array_map.

要做到这一点,只需将所有部件粘合并输出即可。

SO网友:Chip Bennett

对于分层页面面包屑导航,我的做法如下:

// Define Parent Page Hierarchy Crumbs for Child Pages
elseif ( ! is_front_page() && 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 ) {
        $hierarchy .= $delimiter . $crumb;
    }
    $hierarchy = $hierarchy . $delimiter;
    // Note: get_the_title() is filtered to output a
    // default title if none is specified
    $currentLocation = get_the_title(); 
} 
注意,我定义$delimiter 函数的前面部分。你要找的肉在这里。

首先,获取当前页面父页面的ID:

$parent_id  = $post->post_parent;
接下来,设置一个数组以保存分层父页面链接:

$breadcrumbs = array();
接下来,循环遍历每个父页,直到没有其他父页,然后将构造的链接添加到数组中:

// Start looping
while ( $parent_id ) {
    // Get the page object
    $page = get_page($parent_id);
    // Build the HTML link
    $breadcrumbs[] = \'<a href="\' . get_permalink($page->ID) . \'">\' . get_the_title($page->ID) . \'</a>\';
    // Set the parent ID to the next parent,
    // to continue the loop.
    // Eventually, this will return 0,
    // at which time, the looping will end
    $parent_id  = $page->post_parent;
}
最后,按正确的顺序放置HTML链接:

$breadcrumbs = array_reverse( $breadcrumbs );
现在,你可以用$breadcrumbs 大堆

结束

相关推荐

Breadcrumbs - get the author?

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