给自作wordpress主题添加面包屑导航

本腐在做主题当中对面包屑导航这方面可以说是绞尽脑汁,既然不想用插件那就用代码来实现面包屑导航,最终测试了三种方式实现面包屑导航。

第一种代码:
<a title="首页" href="<?php echo get_option('home'); ?>/">首页</a> / <?php the_category(', '); ?> / 正文
效果如:首页 / 分类名称 / 正文
备注:这种是最简单的方法,适合只有一级分类目录的博客,如果文章归属子分类,则显示子分类的名称,不会显示父分类名称。

第二种代码:
<a title="首页" href="<?php echo get_option('home'); ?>/">首页</a> / <?php the_category('/ ',multiple); ?> / 正文

文章属于父分类则效果如: 首页 / 父分类名称 / 正文

文章属于子分类则效果如: 首页 / 父分类名称 / 子分类名称 / 正文

第三种代码:
首先在主题的functions.php文件中添加以下代码:

//面包屑
function the_breadcrumb() {
$delimiter = '/';
$name = '<span class="glyphicon glyphicon-home"></span> <a href="' . get_bloginfo ( 'url' ) . '" title="' . get_bloginfo ( 'name' ) . '">首页</a>'; //text for the 'Home' link
$currentBefore = '<span>';
$currentAfter = '</span>';

if ( !is_home() && !is_front_page() || is_paged() ) {

echo '<div class="breadcrumb">';

global $post;
$home = get_bloginfo('url');
echo '' . $name . ' ' . $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();
echo $currentAfter;

} elseif ( is_day() ) {
echo '' . get_the_time('Y') . ' ' . $delimiter . ' ';
echo '' . get_the_time('F') . ' ' . $delimiter . ' ';
echo $currentBefore . get_the_time('d') . $currentAfter;

} elseif ( is_month() ) {
echo '' . get_the_time('Y') . ' ' . $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[] = '' . get_the_title($page->ID) . '';
$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();
echo '”' . $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;
}

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>';

}
}

然后再文章页面single.php或者要显示面包屑的相应位置添加:

<?php echo '<div>'; the_breadcrumb(); echo '</div>'; ?>
文章属于父分类则效果如:首页 / 父分类名称 / 当前文章名称
文章属于子分类则效果如:首页 / 父分类名称 / 子分类名称 / 当前文章名称
备注:这种方法比较全面。

第四种代码:

<a href="<?php echo get_option('Home'); ?>" title="首页">首页</a>? <?php if( is_single() ){ $categorys = get_the_category(); $category = $categorys[0]; echo( get_category_parents($category->term_id,true,'<em> &raquo; </em>') );echo '您正在浏览正文...'; } elseif ( is_page() ){ the_title(); } elseif ( is_category() ){ single_cat_title(); } elseif ( is_tag() ){ single_tag_title(); } elseif ( is_day() ){ the_time('Y年Fj日'); } elseif ( is_month() ){ the_time('Y年F'); } elseif ( is_year() ){ the_time('Y年'); } elseif ( is_search() ){ echo htmlspecialchars($s).' 的搜索结果'; } ?>

这个方法是在彼岸时光看到的,我改天去试试有没有效

本文共 42 个回复

  1. maillot trek says:
    博主 更折腾的呀。
  2. 郴州快乐淘 says:
    额····用代码自己做导航···我觉得博主玩的都是技术活啊

发表留言,喵!