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件のトラックバック

  1. 特定の親を持つカテゴリの抽出 | Satake Studio Developer's Blog
    トラックバック日時 2010 年 4 月 17 日 at 6:22 PM

    [...] のみの一覧、特定カテゴリだけのアーカイブになります。   ※ ここ(WordPressで全てのカテゴリー構造を取得する方法)とここ(カテゴリ名、投稿リスト、とか)がすごく参考になりまし [...]

  2. wordpressでカテゴリー一覧を表示する方法2 | ダリの雑記:WEBプログラム版
    トラックバック日時 2010 年 7 月 18 日 at 10:15 PM

    [...] 今回はget_terms()を利用します。(参考サイト:とりさんのソフト屋さんサイト) <?php     $cat_all = get_terms( ‘category’, ‘fields=all&get=all&orderby=id’ );     foreach($cat_all a [...]

コメント投稿

* は必須項目です。入力したメールアドレスは公開されません。

*
*



AccessやExcel、.NETソフトウェア開発、WordPress等を使用したWebのシステム化、PCサポート、コンサルなどを行っています。全国対応可能です。お問い合わせください。
TEL (0776)56-8539