ホーム > タグ > 親カテゴリ

親カテゴリ

アーカイブページのmetaタグのtitleに親カテゴリ名と子カテゴリ名を入れたい【WordPress】

やりたかったこと。

ファイル:header.php
カテゴリーページのmetaタグのtitleに親カテゴリ名と子カテゴリ名を入れたい。

ただ、うまくいかなくて、まわりまわって結局簡単なことじゃん…
ってなったわけだけど、その考えた経緯を含めメモしておこう。
他で使うかもしれないし…
同じように困っている人もいるかもしれないし…

とにかく、メモメモ!

今回、カテゴリは下記のようなかんじ。

  • たのしい(5)
    - お知らせ(3)
    - できごと(2)
  • かなしい(3)
    - お知らせ(1)
    - できごと(2)

のようになっている。
カテゴリは必ず「お知らせ」か「できごと」に属し、「たのしい」か「かなしい」を親カテゴリにもつ。
親カテゴリの「たのしい」に直接属することはない。

まず、基本的には下記でいいはず。

wp_title( '' ); echo '|'; bloginfo( 'name' );

だが、これだと 

お知らせ|ブログタイトル

ってなる。でもほんとは、

たのしいお知らせ|ブログタイトル

って見せたい。
ということは、親カテゴリのカテゴリ名の取得が必要だ。
下記で親カテゴリを吐き出すことに成功。

$cat = get_the_category();
$cat = $cat[0];
$parent = get_category($cat->category_parent);
$parent_catname = $parent->cat_name;
echo $parent_catname;

※親カテゴリのID
$cat->category_parent;

ということは…

$cat = get_the_category();
$cat = $cat[0];
$catname = $cat->cat_name;
$parent = get_category($cat->category_parent);
$parent_catname = $parent->cat_name;
echo $parent_catname .$catname .' | '; bloginfo( 'name' );

これで、
たのしいお知らせ|ブログタイトル
になったー!!
と、よろこんだのも束の間、問題発見。
「お知らせ」のアーカイブの時はいいのだが、「たのしい」のアーカイブでも
たのしいお知らせ|ブログタイトル
となってしまう。
うーーん…

<?php $cat = get_the_category();
 echo(get_category_parents($cat[0]->cat_ID, TRUE, ''));
 if (is_null($cat[1])){
 }else {
  echo '|'.(get_category_parents($cat[1]->cat_ID, TRUE, ''));
 }
?>
ってしてみたり、
<?php $cat = get_the_category();
 echo(get_category_parents($cat[0]->cat_ID, TRUE, ''));
 if ($cat[1]!=""){
  echo '|'.(get_category_parents($cat[1]->cat_ID, TRUE, ''));
 }
?>

ってしてみたり…

なんか子カテゴリの値調べたりとか親カテゴリ調べたり、is_nullとか使ってみたり、っていうか空じゃないときをどうかいたらいいか分かんなくなってみたり、だんだん混乱してきたのでここはひとつ冷静に!
get_category_parentsは始めに試してうまくいかなかったっけ…

って、まわりにまわって再びget_category_parentsにたどりつく。
とりあえず、もう一度、冷静に。

echo (get_category_parents($cat, false, '&nbsp;') .'|&nbsp;'); bloginfo( 'name' );

おぉーーーーー!!!でるじゃんか!!
たのしいお知らせ | ブログタイトル
いぇーい!
「たのしい」のアーカイブは?
たのしい | ブログタイトル
出る!!いぇーーい!!

echo (get_category_parents($cat, true, '&raquo;&nbsp;') .'|&nbsp;'); bloginfo( 'name' );

みたいにすると、
各カテゴリーへのリンクを出力するのでタイトルでは使えない。
&raquo;&nbsp;はセパレータ。自由に設定!

よって、今回のmetaタイトルのアーカイブの条件分岐は

if ( is_category() ) {
 echo (get_category_parents($cat, false, '') .'|&nbsp;'); bloginfo( 'name' );
}

となった。
あー、、、長かった…
あー、単純なことだった…
でもまぁとにかく、解決できてよかった。

最後にget category parentsについてメモ。

書式

<?php echo(get_category_parents(category, display link, separator, nice name)); ?>

ループ内・外 で使用可能

引数
category (整数/$cat)
親カテゴリーを取得するカテゴリーのID。デフォルト値は「$cat」で、現在表示しているカテゴリーページ/記事のカテゴリーID。

display link (true/false)
各カテゴリーへのリンクを出力するかどうか。
true(デフォルト。リンクを出力する)
false(デフォルト。リンクを出力しない)

separator (文字列)
リンクの間を区切る記号やテキスト。デフォルト値は「»」。
nice name (true/false)- カテゴリー・スラッグを名前として使うかどうか。

true(デフォルト。英数字小文字のみのカテゴリー・スラッグを出力)
false(デフォルト。大文字や記号、日本語を使ったカテゴリー名を出力)

コード記述例

<?php echo(get_category_parents($cat, true, ' » ')); ?>

【関連Codex】

Home > タグ > 親カテゴリ

want

Return to page top