WorsPressでひとつの投稿にいくつかのカテゴリーを登録している時、どうしてもある特定の親カテゴリーや特定の子カテゴリーを取得したい場合があります。
WordPressでカテゴリーを取得する関数は割りと多めに用意されていて、使用する個人の考えで方法は幾つもあると思いますが、ひとつの参考にして頂ければ幸いです。
WordPressで投稿の特定の親カテゴリーを取得し名前を出力する。
1 2 3 4 5 6 7 8 9 10 11 |
<?php $cat = get_the_category(); $data = array(); foreach ($cat as $value) { if ($value->parent == get_cat_ID('food')) { $term = get_term($value->parent, 'category'); echo $term->name; } } ?> |
まずはじめの第1歩はget_the_category()メソッドで投稿の持つすべてのカテゴリーに関するデータを取得します。ここは割りと皆さん共通だと思います。
次に取得したデータをforeachで回してすべての親のカテゴリーIDの中にget_cat_ID()であなたの欲しいカテゴリーのIDと一致するものがあるか調べます。このケースでは’food’カテゴリーです。
一致するIDがあればget_term()でそのカテゴリーの持つデータを取得し名前を出力します。
ポイントはget_term()でカテゴリーのデータを取得することです。get_term()ではなくget_category()とかでも取得はできると思いますが、多分いろいろやろうと思うと面倒で汎用性があまりありません。個人的にはWordPressで特定のカテゴリーの何かしらのデータを取得したいケースではget_term()で取得することをお勧めします。
WordPressで投稿の持つ特定の親カテゴリーの子カテゴリーを取得する。
1 2 3 4 5 6 7 8 9 10 11 |
<?php $cat = get_the_category(); $data = array(); foreach ($cat as $value) { if ($value->parent == get_cat_ID('food')) { $data[] = $value->term_id; } } $term_child = get_term($data[0], 'category'); echo $term_child->name ?> |
基本は先ほどのコードと一緒で「get_the_category()」でカテゴリーのすべてのデータを取得します。
次に新しくdata配列を用意して親に’food’を持つ子カテゴリーのカテゴリーIDを配列に入れていきます。
foreachを抜けた後で取っておいたdata配列の好きな位置のデータをget_term()に入れて子カテゴリーのデータを取得し、名前を出力します。
WordPressで特定の親カテゴリーを取得してその子孫カテゴリーとともにリンクを出力する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $cat = get_the_category(); $data = array(); foreach ($cat as $value) { if ($value->parent == get_cat_ID('food')) { $data[] = $value->term_id; } } $pid = get_cat_ID('food'); array_unshift($data, $pid); foreach ($data as $value) { $term = get_term($value, 'category'); echo '<li><a href="' . get_category_link($value) . '">' . $term->name . '</a></li>'; } ?> |
上の二つのコードを少しいじるだけで簡単にリンクを出力することができます。phpの関数「array_unshift()」で子カテゴリの配列の’先頭’に親のカテゴリーIDをプッシュします。
後はforeachで回してWordPressの関数「get_category_link()」に値を突っ込めばOKです。
今回はここまでで終わりにしたいとと思います。先にも少し書きましたが、WordPressでカテゴリーに対して何かの操作をしたいケースでは、僕は「get_term()」の使用をお勧めします。「get_term()」であれば、後に自分で作ったカスタムなタームを使用する時も第2引数を変更すれば応用可能です。工数を減らすことは自分にとってもクライアント様にとっても利益になることなので、その場しのぎのコードにならないように常に最善の選択を心がけたいと思っています。それではまた。