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