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を使ってカスタマイズしていたテンプレートの修正で死にそうになったことがある。