複数カテゴリ対応のパンくず

 パンくずの関数やプラグインなんて山ほどあるし、複数カテゴリ対応のコードも見かけるけど、自分の希望の形になるものがなかったので作ってみた。

 複数カテゴリに対応させたもので、楽天のようにずらずら出てくるあれ。

 

 ホーム > カテゴリ1 > 記事タイトル

 ホーム > カテゴリ2 > 記事タイトル

 

 こんなやつ。投稿時にチェックを入れたカテゴリを全て表示する。

 2パターンあるけど、とりあえずノーマルな形のものをぺたり。

 

 function.phpに記述↓

function bcNavi() {
    $category = get_the_category();
    foreach($category as $cat){
        $str. = '<ul class="bcNavi clearfix">';
        $str. = '<li><a href="'. home_url() .'">HOME</a></li>';
        $str. = '<li>&gt;</li>';
        if ($cat->parent) {
            $parent = get_category($cat->parent);
            $str. = '<li><a href="'. home_url() .'/?cat='. attribute_escape($parent->cat_ID) .'">'.$parent->cat_name .'</a></li>';
            $str. = '<li>&gt;</li>';
        }
        $str. = '<li><a href="'. home_url() .'/?cat='. attribute_escape($cat->cat_ID) .'">'. $cat->cat_name .'</a></li>';
        $str. = '<li>&gt;</li>';
        $str. = '<li>'. the_title() .'</li>';
        $str. = '</ul>';
    }
    echo $str;
}

※/?cat=の部分は、パーマリンク設定によって変更する必要あり。これはデフォルトの設定の場合。

 

 テンプレートに記述↓

<?php echo bcNavi(); ?>

 

 これの難点は、3階層目までしか対応していないこと。

 

 ホーム > カテゴリ1 > カテゴリ2 > 記事タイトル

 

 ここまでが限界。将来的にカテゴリがどんどん増えるページにはNG、祖先カテゴリが表示されなくなってしまう。

 

 自分はとりあえず3階層目まであれば十分だったので作り込んではいないのだけど、いずれ完成はさせた方がいい……のかな。

 でも、4階層まであるようなページはユーザビリティの面でどうかと思うので、気が向いたらやるということで(逃)。

抜粋もどき。抜粋だけど。

 記事の抜粋にはthe_excerptという便利な関数がある。

 excerptの表示を詳細設定できるAdvanced Excerptというありがたいプラグインもある。

 でも以下の条件の両方を満たすことはできなかったりする。

○改行を反映させたい

○指定の文字数を越えた時だけ「…」をつけたい

 できるのかもしれないけどわからなかった(;ω;)のでテンプレートに直接以下のコードを書いた。

<?php
	$cnt = get_the_content();
	if (mb_strlen($cnt, 'UTF-8') > 200) {
		echo mb_substr(strip_tags($cnt, '<p>,<br>'), 0, 200). '...';
	}else {
		echo $cnt;
	}
?>

○mb_strlen:文字数カウント

○strip_tags:タグを削除

○mb_substr:文字列の一部を取得

 記事の本文が200文字以上なら、200文字までを表示して後ろに「…」をつける。pタグとbrタグのみ反映させる(タグもカウントされるので、divタグやaタグを反映させると途中で切れてレイアウトがえらいことになる)。

 本文が200文字以内なら本文をそのまま表示する。

 もちろん、これでは本文中にリンクがあった際に、記事によってリンクがあったりなかったりという事態が発生する。

 なので、Advanced Excerptでa・p・brタグを有効にしておいて、以下のようにした方が良いかもしれない。

<?php
	$cnt = get_the_content();
	if (mb_strlen($cnt, 'UTF-8') < 200) {
		echo $cnt. '...';
	}else {
		echo the_excerpt();
	}
?>

 自分でタグを途中で切れないようにできればそれが一番良いのだけど、それもわからなかったorz だめにんげん。

 それさえわかればプラグインを使う必要がなくなるので、わかり次第追記しようと思う。

ご挨拶

こんにちは、くるみもちと申します。もちもちのうぇぶでざいなーです。

○元々日記兼備忘録でしたが、ほぼ日記になっております。情報が古いのでご注意ください。

○基本的にはTwitterに生息しており、こちらの更新は超気まぐれです。

○このふざけたブログタイトルには以下のような深い由来があります。

1.「ドメインはハーフムーンが一番いいかな」

2.「サブドメインはもちで」

3.「やっぱり取られてるか……じゃあもちもちで」

4.「ブログタイトルどうしよう」

5.「思いつかないからとりあえずURLのこれでいいや、後で変えよ」

 更新はゆるーくやっていきます、どうぞよろしくお願いいたします。