WordPressで指定の親カテゴリに当てはまる子カテゴリ名を表示したい!!【子カテゴリ名を呼び出す方法】
私ね、WordPressをずっと使ってきていつもいつも困ってたことがあったんです。。。
それが、カテゴリー問題。
親カテゴリ・子カテゴリとか指定しても、カテゴリ名を表示させるときに親子関係なくID順に全てが並んでしまうこと。
- 機能が必要なサイトで、複数カテゴリ指定したいときにいつも困っていました。
- 普通にカテゴリ名を表示させると何が困るのか
- 複数の親カテゴリを選択、複数の子カテゴリを選択している時の、指定の親カテゴリにあてはまる子カテゴリ名を表示したい
- single.phpで、親カテゴリ名を呼び出さず子カテゴリ名だけをリンク付きで呼び出し、更に複数選択されているときにカテゴリ名の間に「,」コンマを入れたい
- まとめ
機能が必要なサイトで、複数カテゴリ指定したいときにいつも困っていました。
例えば。
一つの投稿記事をあげます。この投稿記事が求人情報だとします。
東京で、営業と事務の新卒採用をしたいという求人を出します。
そこで投稿記事を作成すると。
「採用枠」という親カテゴリの子カテゴリが「新卒採用」だとして。
その中でさらに親カテゴリ・子カテゴリに属する枠がいくつかある。
「勤務地」という親カテゴリの子カテゴリを「東京」と選択。
「職種」という親カテゴリを「営業」「事務」と選択。
これだけで7つのカテゴリをすでに選択していることになりますね。
(もっと良いやり方はあるとは思いますが、あえて)
このカテゴリを、パンくずリストや一覧画面で表示させる必要があるとき。
従来のカテゴリ名の表示をさせると、選択されているカテゴリがID順にズラーーーッと並んでしまいます。
普通にカテゴリ名を表示させると何が困るのか
そうなると、パンくずリストの操作は手動では不可能です。
新卒採用>東京>営業、事務
と表示させたいにもかかわらず
採用枠、新卒採用、勤務地、営業、東京、職種、事務
など余計なカテゴリが出てきたり順序がめちゃくちゃになることも。
おいおい。親カテゴリと子カテゴリが横並びになられても。
カテゴリーページなど一覧画面で
採用枠:新卒採用
勤務地:東京
職種:営業、事務
など分けて表示させたい場合にもうまく呼び出せません。
まあとりあえず入り組んだページやカテゴリが多いページを作るとうまくいかないことが多々あったのですが(もうしばらく前のことだからどううまくいかなかったか忘れたww)、それを解決する策にやっと巡り合えたので備忘録を兼ねてご紹介します。
複数の親カテゴリを選択、複数の子カテゴリを選択している時の、指定の親カテゴリにあてはまる子カテゴリ名を表示したい
現在記事のカテゴリを特定の親に属するものだけ表示
こちらのサイトに巡り合えたおかげで、やっと解決しました。
この親カテゴリに当てはまる子カテゴリを出したいんだよ〜〜〜〜!!というときのわざです。
<?php $categorys = get_the_category( $post_id ); foreach($categorys as $category){ if($category->parent==親カテゴリID): echo $category->name; endif; }; ?>
これで該当親カテゴリに属する子カテゴリ名が表示されます。
親カテゴリを指定するやり方が何度やってもどんな方法を試しても全くうまくいかなかったから。
本当に良かった。
長年の謎が解決・・・ありがとうございました。心から感謝しかない。
single.phpで、親カテゴリ名を呼び出さず子カテゴリ名だけをリンク付きで呼び出し、更に複数選択されているときにカテゴリ名の間に「,」コンマを入れたい
こちらはパンくずリストなどで使えます。
(メモしてあったものなので、改行されてないですが大丈夫かな、使う際は改行していただいた方がわかりやすくてかも)
子カテゴリ名をリンク付きで呼び出すのって難しいし、親カテゴリ名も呼び出されちゃうから、どうしたらいいのかわからなくて手こずりました。
<?php $cats = get_the_category(); $str = ''; foreach ($cats as $cat): if ($cat -> parent) { $str .= '<a href="'.home_url().'ここにカテゴリのスラッグ名'.$cat->slug.'">'.$cat->cat_name.'</a>'.','; } endforeach; echo rtrim ($str, ","); ?>
「get_the_category」を使い、「 foreach ($cats as $cat): if ($cat -> parent)」で親カテゴリを抽出し、子カテゴリの「slug」スラッグ、「cat_name」カテゴリ名を呼び出し、「 rtrim ($str, ",");」で最後だけコンマを取り外すコードを作りました!
全く知識がないので不安ではありますがこれでできたのでわたし的には頑張ったからなかなか大発明かと思ったのですがどうでしょうか。。。。もちろん色々なサイトを参考にしております。。。。わたしだけでは無理。わからんわ。
自動的にコンマが付いてしまうのを、最後のコンマを取り外す指示を出しているのでパンくずリストにはぴったりだと思います。
まとめ
ちょっと記憶が曖昧になっている部分もありますが。
優先順位がつけられず思い通りに表示できないカテゴリ名呼び出し問題が解決できると嬉しいです。