category

category

wordpress

2024.10.28

2024.11.2

41

【WordPress】記事が属する全てのタクソノミーをSQLで問い合わせる

記事が属するターム(カテゴリ)のタクソノミースラッグを取得したいことがあり、どうやらWordPress関数がなさそうなので、直接データベースに問い合わせます。

まずは記事が属するタームが格納されているテーブルを確認。

「term_relationships」というテーブル
object_id(記事ID)term_taxonomy_id(タームID)term_order
180
190
1100
※記事ID「1」に、3つのタームID「8」「9」「10」が紐づいている

ということで、記事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つのタームのタクソノミーが得られた。

631

コメント

コメントを残す

ニックネームは公開されます

CAPTCHA


閉じる