一番簡単に実装するならYoastのパンくずリストを使おう。SEO対策ですでに入れてると思うのでついでに使うのが吉。
Yoast入れてるなら次のコードでパンくずリストを設置できる。
<?php
if ( function_exists('yoast_breadcrumb') ) {
yoast_breadcrumb( '<div id="breadcrumbs">','</div>' );
}
?>
プラグイン使わずパンくずリストを実装する
以下のコードをfunctions.phpに追記する。
パラメータにはhtmlタグ用のclassを指定する配列を入れている。
if ( ! function_exists( 'my_custom_breadcrumb' ) ) {
/**
* Desiplay Breadcrumb
* $class = ['ol' => 'ol-class','li' => 'li-class','a' => 'a-class','bar' => 'bar-class',];
*/
function my_custom_breadcrumb($class) {
global $post;
if ( !is_front_page() ) {
echo '<ol class="'.$class['ol'].'" itemscope="" itemtype="http://data-vocabulary.org/Breadcrumb">';
echo '<li class="'.$class['li'].'" itemprop="title"><a class="'.$class['a'].'" href="'.home_url().'" itemprop="url">Home</a></li>';
echo '<li class="'.$class['bar'].'">/</li>';
if ( is_home() ) {
$title = wp_title('',false,'');
echo '<li class="'.$class['li'].'" itemprop="title">'.$title.'</li>';
} elseif ( is_category() ) {
$cat_id = get_query_var('cat');
$cat_link = get_category_link( $cat_id );
$cat_name = get_cat_name( $cat_id );
echo '<li class="'.$class['li'].'" itemprop="title">';
echo '<a class="'.$class['a'].'" href="'.$cat_link.'">'.$cat_name.'</a></li>';
} elseif ( is_single() ) {
$category = get_the_category();
$cat_link = get_category_link( $category[0]->term_id );
$cat_name = $category[0]->cat_name;
echo '<li class="'.$class['li'].'" itemprop="title">';
echo '<a class="'.$class['a'].'" href="'.$cat_link.'">'.$cat_name.'</a></li>';
echo '<li class="'.$class['bar'].'">/</li>';
echo '</li><li class="'.$class['li'].'" itemprop="title">';
the_title();
echo '</li>';
} elseif ( is_page() ) {
if($post->post_parent){
$anc = get_post_ancestors( $post->ID );
$title = get_the_title();
foreach ( $anc as $ancestor ) {
$output = '<li class="'.$class['li'].'" itemprop="title"><a class="'.$class['a'].'" href="'.get_permalink($ancestor).'" title="'.get_the_title($ancestor).'" itemprop="url">'.get_the_title($ancestor).'</a></li>';
}
echo $output;
echo '<li class="'.$class['li'].'" title="'.$title.'" itemprop="title"> '.$title.'</li>';
} else {
echo '<li class="'.$class['li'].'">'.get_the_title().'</li>';
}
} elseif ( is_tag() ) {
echo'<li class="'.$class['li'].'" itemprop="title">';
single_tag_title();
echo'</li>';
} elseif ( is_day() ) {
echo'<li class="'.$class['li'].'" itemprop="title">';
echo get_the_date();
echo'</li>';
} elseif ( is_month() ) {
echo'<li class="'.$class['li'].'" itemprop="title">';
echo get_the_date('Y - M');
echo'</li>';
} elseif ( is_year() ) {
echo'<li class="'.$class['li'].'" itemprop="title">';
echo get_the_date('Y');
echo'</li>';
} elseif ( is_author() ) {
echo'<li class="'.$class['li'].'" itemprop="title">';
the_author_meta('display_name');
echo'</li>';
} elseif ( is_search() ) {
echo'<li class="'.$class['li'].'" itemprop="title">';
the_search_query();
echo'</li>';
}
echo '</ol>';
}
}
}
パンくずリストをテンプレートで表示
一覧ページや個別記事ページの表示したい位置に設置。
htmlを出力するだけなので、navタグなどで囲んでもOK。
$classList = [
'ol' => 'ol-class',
'li' => 'li-class',
'a' => 'a-class',
'bar' => 'bar-class',
];
my_custom_breadcrumb($classList);