WordPressで全てのカテゴリー構造を取得する方法
WordPressの関数やテンプレートの中にカテゴリーの一覧をオブジェクトで取得する方法が見つからない。
カテゴリーの情報をループさせてタグを整形して表示させる処理は良く使うのではないだろうか?なのでカテゴリー(terms)のオブジェクトを取得する関数を作ってみた。
WordPress 2.7.xの場合は以下のようにします。
function get_all_category_all() {
if ( ! $cat_all = wp_cache_get( 'all_category_all', 'category' ) ) {
$cat_all = get_terms( 'category', 'fields=all&get=all&orderby=term_id' );
wp_cache_add( 'all_category_all', $cat_all, 'category' );
}
return $cat_all;
}
WordPress 2.8.x以上の場合は以下のようにします。
function get_all_category_all() {
if ( ! $cat_all = wp_cache_get( 'all_category_all', 'category' ) ) {
$cat_all = get_terms( 'category', 'fields=all&get=all&orderby=id' );
wp_cache_add( 'all_category_all', $cat_all, 'category' );
}
return $cat_all;
}
orderbyで使える値がバージョンによって変更されています。
get_terms()関数でカテゴリー一覧を取得出来ますが、それだとオブジェクトキャッシュが聞きません。なのでキャッシュがされるようにしてみました。
またカテゴリーIDからパーマリンク(URL)を取得するにはget_category_link()関数を使用します。以下はカテゴリオブジェクトを全て取得して、未分類を除いた最上位カテゴリのパーマリンクを出力するプログラムです。
$terms = get_all_category_all();
foreach ($terms as $term) {
if ($term->parent == $parent && $term->term_id > 1) {
echo get_category_link($term->term_id));
}
}
get_terms()関数で得られたオブジェクトをprint_r関数でダンプしたものは以下。(長いので全て載せていません。)
Array
(
[0] => stdClass Object
(
[term_id] => 1
[name] => 未分類
[slug] => uncategorized
[term_group] => 0
[term_taxonomy_id] => 1
[taxonomy] => category
[description] =>
[parent] => 0
[count] => 3
)
[1] => stdClass Object
(
[term_id] => 9
[name] => WordPress
[slug] => wordpress
[term_group] => 0
[term_taxonomy_id] => 11
[taxonomy] => category
[description] =>
[parent] => 0
[count] => 2
)
[2] => stdClass Object
(
[term_id] => 12
[name] => プラグイン
[slug] => plugin
[term_group] => 0
[term_taxonomy_id] => 13
[taxonomy] => category
[description] =>
[parent] => 9
[count] => 4
)
)
カテゴリID(term_id)、カテゴリ名(name)、説明(description)、スラッグ(slug)、親カテゴリID(parent)等が取得できます。
文章履歴
- 2010/01/01 2.8.x以上の場合の説明を追加
あわせて読む
コメント投稿
2件のトラックバック
[...] のみの一覧、特定カテゴリだけのアーカイブになります。 ※ ここ(WordPressで全てのカテゴリー構造を取得する方法)とここ(カテゴリ名、投稿リスト、とか)がすごく参考になりまし [...]
[...] 今回はget_terms()を利用します。(参考サイト:とりさんのソフト屋さんサイト) <?php $cat_all = get_terms( ‘category’, ‘fields=all&get=all&orderby=id’ ); foreach($cat_all a [...]