WordPressのカテゴリーアーカイブページでパンくずリストを表示する

WordPressのカテゴリーアーカイブページでパンくずリストを表示する

Posted at October 28,2011 12:55 AM
Tag:[Crumbs, Customize, WordPress]

WordPressのカテゴリーアーカイブページでパンくずリストを表示する方法です。

1.概要

このエントリーでは次のように、パンくずリストの先頭にホームへのリンクを表示し、その右側にカテゴリー名をセパレータ「>」つきで表示します。

パンくずリスト

2.カスタマイズ

青色部分のコードを、アーカイブテンプレートのカテゴリー判定部分に記述します。

<?php if (is_category()) { ?>
<div class="crumbs"><a href="<?php echo get_option( 'home' ); ?>/">Home</a> &gt; 
<?php
$cat = get_queried_object();
$breadcrumbs = get_category_parents( $cat, true, ' &gt; ' );
echo preg_replace( '/(.*) &gt;/', '$1', $breadcrumbs );
?>
</div>
<?php } elseif (is_day()) { ?>
…後略…

3.解説

パンくずリストのトップページは次の部分で表示します。「Home」の部分のローカライズは省略しているので、適宜修正してください。

get_option( 'home' ); ?>/">Home</a> &gt;

パンくずリストの、親カテゴリーから記事が属するカテゴリーまでは次の部分で表示します。$catへの保存は不要なのですが、分かりやすくするために用いています。

$cat = get_queried_object();
$breadcrumbs = get_category_parents( $cat, true, ' &gt; ' );
echo preg_replace( '/(.*) &gt;/', '$1', $breadcrumbs );

get_queried_object()で現在処理中のオブジェクトを取得します。

$cat = get_queried_object();

get_category_parents()で親カテゴリーから記事が属するカテゴリーまでのパンくずリストを取得します。第1パラメータはカテゴリーオブジェクト(またはカテゴリーID)、第2パラメータは各カテゴリーリンクの出力要否、第3パラメータはセパレータ文字列を指定します。セパレータ文字列を変更したい場合はこの部分を書き換えてください。

$breadcrumbs = get_category_parents( $cat, true, ' &gt; ' );

ネットで調べたところ、ここまでの処理で出力している記事しかみつからなかったのですが、この状態ではカテゴリーのセパレータが一番右側のカテゴリーの末尾にも表示されてしまいます(下)。

パンくずリスト

そのため、preg_replace()を使って末尾のセパレータを除去しています。

echo preg_replace( '/(.*) &gt;/', '$1', $breadcrumbs );

セパレータ文字列を書き換えた場合は、preg_replace()の第1パラメータに含まれる「 &gt;」の部分(半角スペース含む)もあわせて書き換えてください。

これでカスタマイズは完了です。4項以降は興味があればご覧ください。

4.get_queried_object()の代替手段

get_queried_object()の代替手段を参考までに掲載しておきます。

$category_title = single_cat_title( '', false );
$cat_id = get_cat_ID( $category_title );

single_cat_title()で、現在表示しているカテゴリーアーカイブページのカテゴリー名を取得します。そしてget_cat_ID()でカテゴリーIDを取得します。

あとはget_category_parents()の第1パラメータに、取得したカテゴリーID($cat_id)を設定すればOKです。

$breadcrumbs = get_category_parents( $cat_id, true, ' &gt; ' );

5.get_category_parents()について

get_category_parents()は再帰処理を行うことで、親カテゴリーから記事が属するカテゴリーまでを出力しています。再帰処理を行っているので末尾のセパレータ文字列を除去するようなフィルタは実装できないものと推測します。

参考までに、get_category_parents()のコードを掲載しておきます。この関数はwp-includes/category-template.phpに実装されています。

function get_category_parents( $id, $link = false, $separator = '/', $nicename = false, $visited = array() ) {
    $chain = '';
    $parent = &get_category( $id );
    if ( is_wp_error( $parent ) )
        return $parent;
 
    if ( $nicename )
        $name = $parent->slug;
    else
        $name = $parent->name;
 
    if ( $parent->parent && ( $parent->parent != $parent->term_id ) && !in_array( $parent->parent, $visited ) ) {
        $visited[] = $parent->parent;
        $chain .= get_category_parents( $parent->parent, $link, $separator, $nicename, $visited );
    }
 
    if ( $link )
        $chain .= '<a href="' . get_category_link( $parent->term_id ) . '" title="' . esc_attr( sprintf( __( "View all posts in %s" ), $parent->name ) ) . '">'.$name.'</a>' . $separator;
    else
        $chain .= $name.$separator;
    return $chain;
}

6.パンくずリストを表示するプラグイン

パンくずリストを表示するには、次のプラグインもあります。

ただし、ファイルサイズを絞りたい場合は本エントリーのように個別にカスタマイズするという手もあるでしょう。

関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)