WordPress のパンくずリストをプラグイン無しで実現する3行コード

2010-4-16 23:00
このエントリーをはてなブックマークに追加

WordPress でパンくずリストを実現するプラグインというのがあるようですが、実は標準的な関数 (API) の組み合わせで実現可能です。テーマの single.php または index.php に記述します。場所はループ中の the_title とかのあたりで大丈夫です。

<a href="/">Home</a>  &raquo; 
<?php $cat = get_the_category();
echo get_category_parents($cat[0], true, ' &raquo; '), 'この記事'; ?>

これだけです。見やすいように3行にしてますがもちろん1行でもいけます。区切り文字は変更可能です。

何をしているかというと、WP 標準の get_the_category でエントリーのカテゴリーを取得しています。この戻り値は配列となっています。中には複数のカテゴリーに属していることもあるため、 $cat[0] とその先頭を抜き出しています。最低でも「未分類」とか1つのカテゴリーには勝手に属しているはずですので、配列が空かどうかはチェックしていません。

get_category_parents はカテゴリーが階層になっているときに、その親カテゴリーからの階層を「親カテゴリー>子カテゴリー>マゴカテゴリー」のように並べて返してくれるものです。仕様上、区切り文字に指定した » が一番最後にも付いてしまいます。そのため「この記事」という語を追加しています。

このコードで問題が生じるのは、添付画像などをページとして表示させている場合です。WordPress では添付の画像などのファイルも記事と同じく single.php または index.php を利用して表示できますが、この時にカテゴリーが必ずデフォルト(未分類)になってしまいます。

これを回避するには、ちょっと長くなりますが以下のコードでできると思います。

<?php if (is_attachment()) {
  $parent_id = $post->post_parent;
  $cat = get_the_category($parent_id); 
  echo get_category_parents($cat[0], true, ' &raquo; ');
  echo '<a href="', get_permalink($parent_id), '">', get_post($parent_id)->post_title, '</a> &raquo; このファイル';
} else {
  $cat = get_the_category(); 
  echo get_category_parents($cat[0], true, ' &raquo; '), 'この記事';
} ?>
添付ページのテスト用画像

添付ページのテスト

あ、やっぱり3行では無理がありましたね。まあ10行に収まったということで。

コメントはまだありません

No comments yet.

Sorry, the comment form is closed at this time.

35 queries. HTML convert time: 0.082 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2017 @ futuremix.org ログイン