schema.org構造化データに対応した、プラグインを使用しないパンくずリストです。
このまま function.php に貼り付けて使えます。
呼び出す際は、使いたい場所に <?php breadcrumb(); ?> を記述してください。
function breadcrumb() {
$home = '<li class="breadcrumb-item" itemscope itemprop="itemListElement"
itemtype="https://schema.org/ListItem"><a href="'.home_url().'" itemprop="item"><span itemprop="name">HOME</span></a><meta itemprop="position" content="1" /></li>';
echo '<ul class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList">';
// カテゴリページ・シングルページの場合
if (is_single() || is_category()){
$cats = get_the_category();
$cat = (is_single() && isset($cats[0])) ? $cats[0] : get_category(get_query_var("cat"));
if($cat && !is_wp_error($cat)){
$echo = null;
echo $home;
$count = 1;
$par = get_category($cat->parent);
//カテゴリ情報の取得
$cats = array();
while($par && !is_wp_error($par) && $par->term_id != 0){
$cats[] = $par;
$par = get_category($par->parent);
}
//カテゴリの順番入れ替え
$cats = array_reverse($cats);
//先祖カテゴリの出力
foreach ($cats as $par) {
++$count;
$echo .= '<li class="breadcrumb-item" itemscope itemprop="itemListElement" itemtype="https://schema.org/ListItem"><a href="'.esc_url(get_category_link($par->term_id)).'" itemprop="item"><span itemprop="name">'.esc_html($par->name).'</span></a><meta itemprop="position" content="'.$count.'" /></li>';
}
// 現カテゴリの出力
++$count;
echo $echo.'<li class="breadcrumb-item" itemscope itemprop="itemListElement" itemtype="https://schema.org/ListItem"><a href="'.esc_url(get_category_link($cat->term_id)).'" itemprop="item"><span itemprop="name">'.esc_html($cat->name).'</span></a><meta itemprop="position" content="'.$count.'" />';
echo '</li>';
// シングルページの場合タイトルを出力
if ( is_single() ) {
++$count;
the_title('<li class="breadcrumb-item" itemscope itemprop="itemListElement" itemtype="https://schema.org/ListItem"><span itemprop="name">', '</span><meta itemprop="position" content="'.$count.'" /></li>');
}
}
}
// 月別アーカイブ・タグページの場合
else if ( is_archive() ) {
echo $home;
the_archive_title('<li class="breadcrumb-item" itemscope itemprop="itemListElement"
itemtype="https://schema.org/ListItem"><span itemprop="name">', '</span><meta itemprop="position" content="2" /></li>');
}
// 固定ページの場合
else if( is_page() ) {
echo $home;
the_title('<li class="breadcrumb-item" itemscope itemprop="itemListElement"
itemtype="https://schema.org/ListItem"><span itemprop="name">', '</span><meta itemprop="position" content="2" /></li>');
}
// 検索ページの場合
else if( is_search() ) {
echo $home;
echo '<li class="breadcrumb-item" itemscope itemprop="itemListElement"
itemtype="https://schema.org/ListItem"><span itemprop="name">「'.get_search_query().'」の検索結果</span><meta itemprop="position" content="2" /></li>';
}
// 404ページの場合
else if( is_404() ) {
echo $home;
echo '<li class="breadcrumb-item" itemscope itemprop="itemListElement"
itemtype="https://schema.org/ListItem"><span itemprop="name">ページが見つかりません</span><meta itemprop="position" content="2" /></li>';
}
echo "</ul>";
}
// アーカイブの余計なタイトルを削除
add_filter( 'get_the_archive_title', function ($title) {
if ( is_category() ) {
$title = single_cat_title( '', false );
} elseif ( is_tag() ) {
$title = single_tag_title( '', false );
} elseif ( is_month() ) {
$title = single_month_title( '', false );
}
return $title;
});
確認はGoogleの 構造化データテストツール で行います。
参考サイト
基本の形はこちらを参考に実装。
WordPress|パンくずリストを自作する方法 | コトダマウェブ
パンくずリストのschema.org構造化についてはこちらがわかりやすいです。
パンくずリストとは?作り方とCSSデザインサンプル12選
positionを取得する方法など参考にしました。
WordPressでschema.org構造化データに対応したパンくずリストの作り方【投稿・カテゴリー用】