WordPress, 子カテゴリのカテゴリIDを取得したい

WordPress のテンプレートタグ、カテゴリ。

ある親カテゴリの子カテゴリのIDを取得したい時があったけど、どうも該当するテンプレートタグが無さそうだった。
$wpdb インスタンスを使ってSQLクエリを使ってみることにした。

$wpdb->get_results("SELECT t.term_id FROM $wpdb->term_taxonomy AS term LEFT JOIN $wpdb->terms AS t ON term.term_id = t.term_id WHERE parent = 'Parent ID' ORDER BY t.slug");

WordPress 2.5系からコンテンツやカテゴリ管理に taxonomy「分類」が使われています。

terms
カテゴリ、タグに関する情報テーブル

term_id bigint(20) PRIMARY auto_increment
name varchar(200) INDEX カテゴリ名 / タグ名
slug varchar(200) UNIQUE
term_group bigint(20)

term_taxonomy
カテゴリ、タグに関する情報テーブル

term_taxonomy_id bigint(20) PRIMARY auto_increment
term_id bigint(20) UNIQUE
taxonomy varchar(32) category / link_category / post_tag
description longtext
parent bigint(20) 親ID
count bigint(20) 投稿数

SQLの結果から子カテゴリIDを取出す。

$children_cats = array();
foreach($wpdb->last_result as $cat){
	$children_cats[] = $cat->term_id;
}

関数化して functions.php にでも置いておくと便利かな。

あと、バージョンアップに伴ってテーブル構造が変わったら使えなくなる。
2.5系へのアップグレードでカテゴリ関連のテーブル構造が変わって、SQLを使ってカスタマイズしていたテンプレートの修正で死にそうになったことがある。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください