OXY NOTES

functionsを使ってパンくずリストに複数のカテゴリを加える方法

カテゴリは投稿の分類で、タグはキーワードの分類。わかっているけれど…

ブログの記事を整理する場合、カテゴリやタグでしっかりと整理できればいいですが、投稿が多くなると分類も増えて、管理が難しくなります。メモや備忘録として使われるブログの性質上、仕方のないことだと思います。当サイトではそれを見越してカテゴリをタグのように使って混乱をさけていましたが、問題が発生しました。

当サイトではパンくずリストの表示に「Breadcrumb NavXT」を使用していました。しかし、1つだけ不満点がありました。「複数のカテゴリに属する投稿の場合、名前順で一番初めにヒットしたカテゴリだけしか表示しない」という点です。

WordPress」と「PHP」というカテゴリに属する記事なのに、「PHP」としか表示しないようでは補助的なナビゲーションとしてパンくずリストを設置する意味が損なわれます。
そこで全てのカテゴリを出力するコードを書きました。

functions.phpの最後に以下のコードを追加。

// カテゴリを複数書き出すパンくずリスト
function the_breadcrumb() {
	if (!is_home()) {
		echo '<a href="'.home_url().'">Home</a>';
	}
	if (is_category() || is_single()) { //カテゴリページの場合。「Home>[カテゴリ,カテゴリ]」
		echo " &gt; [";
		the_category(", ");
		echo "]";
	}
	if (is_single()) {//投稿ページの場合。「Home>[カテゴリ,カテゴリ]>タイトル」
		echo " &gt; ";
		the_title();
	} elseif (is_page()) { //固定ページの場合。「Home>親ページ>子ページ>タイトル」
	echo ' &gt; ';
	global $post; //グローバル変数の取得
	$ancestors = get_post_ancestors($post->ID);
		foreach (array_reverse($ancestors) as $parid) {
		$title = get_page($parid)->post_title;
		echo '<a href="'.get_page_link($parid).'" title="'.$title.'">'.$title.'</a> &gt; ';
		}
	the_title();
	}
}

追記

投稿ページ以外でも正常に動作するように改良しました。カテゴリページ、固定ページでも動作します。
カテゴリではなく、タグ表示にしたい場合は「the_category」を「the_tag」に置き換えてください。

パンくずリストを表示させたい場所(当サイトではloop-single.php)に

<?php the_breadcrumb(); ?>

を追加。

あとはCSSで好きにデザインすれば、完成です。カテゴリをタグのように使ってる場合に有効です。サンプルはこのページに表示されたパンくずリストをご覧ください。

制作にあたって「こちらのサイト」を参考にさせていただきました。この場を借りてお礼をさせていただきます。