Hiromuブログ

最近はこちら(https://zenn.dev/hiromu)が本体

WordPressのテーマにパンくずリストを実装する

以前パンくずリストをHTML化したのでそれをWordPressのテーマ化します。

これ実は結構苦労しました。

WordPressのカテゴリは階層化できる(親御関係を持たせられる)し、一つの記事に複数のカテゴリを付けられるから。

 

単に<?php the_category(', ') ?>とするだけだと場合によっては以下のようにカオスになります。

blog027

 

そんなあたりを考慮してfunctions.phpに以下を実装しました。

function custom_the_category() {
    $cat = get_the_category();
    $category = array();
    $category2 = array();

if( count( $cat ) < 3  ) { 
    foreach( $cat as $c ){
        if(!$c->category_parent){//親のとき
            $category[] = '<a href="' . get_category_link($c-&gt;term_id) . '" rel="category tag">' . $c->cat_name . '</a>';
        }else{
            $category2[] = '<a href="' . get_category_link($c-&gt;term_id) . '" rel="category tag">' . $c->cat_name . '</a>';
        }   
    }
    $categories = array_merge($category, $category2);
    echo implode( '</li><li>', $categories );
} else {
    echo "(この記事は複数のカテゴリに分類されています)";
}

}

 

これを適当な位置で呼び出します。

 

親子関係の並び順の適正化

blog28

「子」→「親」という表示にならずに、「親」→「子」の順で表示されるようにしています。

 

複数カテゴリに登録されている記事の対応

blog29

階層表示のしようがないのでその旨表示するようにしました。

なお、親カテゴリ二つだけとか子カテゴリ二つだけに分類されている場合おかしな表示になることをこの記事を書いていて気づいた・・・

基本的に親カテゴリには必ずカテゴライズし、二つの親カテゴリにはカテゴライズしないという運用を想定していたので考えきれていなかった。if(親カテゴリがないとき)やif(親が2回カウントされたとき)という処理を入れたほうがいいか。。