記事が属するターム(カテゴリ)のタクソノミースラッグを取得したいことがあり、どうやらWordPress関数がなさそうなので、直接データベースに問い合わせます。
まずは記事が属するタームが格納されているテーブルを確認。
「term_relationships」というテーブル
| object_id(記事ID) | term_taxonomy_id(タームID) | term_order |
|---|---|---|
| 1 | 8 | 0 |
| 1 | 9 | 0 |
| 1 | 10 | 0 |
ということで、記事IDを条件にSELECTで問い合わせ、取得したタームIDからタクソノミーを取得する。
コードはこちら
/*記事IDを条件にSQLで問い合わせ*/
global $wpdb;
$table_prefix = $wpdb->prefix;
$tablename = $table_prefix . 'term_relationships';
$sql = "SELECT term_taxonomy_id FROM {$tablename} WHERE object_id = %d";
$post_terms = $wpdb->get_results( $wpdb->prepare( $sql, $post->ID ) );
/*タクソノミー取得*/
$tax = array();
if($post_terms){
foreach($post_terms as $value){
$term_info = get_term($value->term_taxonomy_id);
$tax[] = $term_info->taxonomy;
}
}
/*結果出力*/
echo('<pre>');
var_dump($tax);
echo('</pre>'); ※詳細ページであることが前提なので$post変数を使用しているが、もし$post変数に取得したい記事情報が入っていない箇所で使用する場合は、「$post->ID」の箇所に記事IDを入れればOK。
2~6行目は記事IDからタームを取得している。タームを取得するならget_the_terms関数を使えばいいのでは?思われた方もいると思いますが、タクソノミーがわからないとget_the_terms関数は使えない。
9~15行目ではタームからタクソノミーを取得している。
結果(配列$taxの中身)
array(3) {
[0]=> string(8) "category"
[1]=> string(8) "category"
[2]=> string(8) "post_tag"
}
記事に紐づいたいた3つのタームのタクソノミーが得られた。



コメントを残す