前回は、親のカテゴリ情報を取得する方法の記事を書いたんですが。
目次
何がしたいのか
カテゴリーごとに別々のアイコンを表示させたいと思ったところ、記事によってはカテゴリーの階層が深かったしますよね?
例えばメンズとレディースなど一番上の親カテゴリーがあってそれぞれジャケットなどの子カテゴリーがあってされにダウンジャケットなどの孫カテゴリーとか。(下記参照)
メンズ(親) ├ パンツ(子) └ ジャケット(子) └ ダウンジャケット(孫) レディース(親) ├ パンツ(子) └ ジャケット(子) └ ダウンジャケット(孫)
でその記事が孫カテゴリーや子カテゴリーのみにいた場合に、一番上の親カテゴリーのメンズ・レディースのどちらかに所属しているかによって別々のアイコンを表示させたい場合にはどうすれば?ってのを調べたのでメモします。
ただwordpressは複数カテゴリー登録できるので親と子の複数カテゴリーに登録すればいいとか、ジャケットだけどメンズとレディースでも着れるなど複数の親カテゴリーを持つ記事の場合などは今回は省いてます。
まぁ前提としてカテゴリーのスラッグ名と画像の名前をそろえるようにしておきます。
スラッグ名:mens/画像ファイル:icon_mens.jpg みたいな感じです。
カテゴリーが子を持たない場合
例えば、メンズ、レディース、キッズカテゴリーなどそれぞれが子カテゴリー持っていない場合は下記のようでいいんじゃないかなーと。
子カテゴリーの記事の場合
だいだいの記事って、メンズ→ジャケット、レディース→小物 みたいに階層になっていて、例えばジャケットカテゴリーに所属しているけど、アイコン画像はメンズ画像を表示したいって時は親の情報が必要になってくるので
下記のようでいいのかなーと。
parent){
$parent_info=get_category($cat_now->parent); //親のカテゴリ情報を取得
//親のカテゴリーのスラッグ名
$slug=$parent_info->slug;
}
?>
一番上の階層の親カテゴリーのスラッグ名を取得には?
孫のカテゴリーのようにさらに深くなった場合には【get_category_parents】を使います。
term_id; // 最初のカテゴリのID
$lists=get_category_parents($cat_id,false,"/",true); //祖先カテゴリを出力
$list=explode('/',$lists);
?>
get_category_parentsで投稿記事のカテゴリーリストを取得する
【get_category_parents】で現在の記事のカテゴリーIDを引き渡してあげることで、その記事のカテゴリーを含む一番上の階層のスラッグ名までのリストを返してくれます。
ただ今回はスラッグ名を画像の名前に利用しているんで、スラッグ名を取得したいのであれば、【get_category_parents】の第4引数をtrueにしてあげることで取得できます。
なので、今回は「現在の記事のカテゴリーから一番上のカテゴリーまでのスラッグ名のリストを’/’区切りでリンクなしで取得する」っていう意味になるので下記の形式でスラッグ名が取得できます。
*ジャケットはjacket、ダウンジャケットはdownjaketというスラッグ名を付けた場合です。
mens/jacket/downjaket
ちなみに、【get_category_parents】の引数は下記のような感じです。
第1引数 | カテゴリーID |
---|---|
第2引数 | カテゴリー名をリンクで取得するかどうか。取得する場合はtrue、名前のみの場合はfalse |
第3引数 | 区切り文字(省略時は’/’) |
第4引数 | カテゴリーのスラッグを取得する場合はtrue、カテゴリー名を取得する場合はfalse |
第5引数 | 閲覧済みのカテゴリーIDの配列 |
詳細は下記のサイトに載っています。
explode関数を使って文字列を分割する
【get_category_parents】でリストを取得したら、explode関数で’/’区切りで文字列を分割して配列にし、配列の最初の0番目に一番上の階層のスラッグ名が格納されているので出力することでアイコン画像のファイル名として利用しています。