スタッフブログ
2017.5.25
【WordPress】すべてのカスタムタクソノミー情報を一括取得してみた
こんにちは。ウェブクリエイターの中井です。
カスタム投稿タイプを使っていると、同時にお世話になるのがカスタムタクソノミーです。
特にショッピングサイトを構築する際に、独自のタクソノミーがいくつかあるなんてこともあります。
そんなときにいちいちそのタクソノミーを指定して
情報を取得するのもスマートじゃないな~と思い
一括で情報を取得する方法を考えてみました。
カスタム投稿タイプのアーカイブページなどで情報を取得する場合
<?php
if( is_tax() ) {
//タクソノミースラッグからpost_typeを取得
$post_type = get_taxonomy($taxonomy)->object_type[0];
}
//投稿タイプに紐づくすべてのタクソノミースラッグ
$taxonomies = get_taxonomies( array( 'object_type' => array( $post_type ) ) );
//タクソノミーごとにターム情報の配列を格納する
foreach( $taxonomies as $tax ) {
$$tax = get_terms( $tax, array( 'hide_empty' => false ) );
//タームメタ情報を取得
foreach( $$tax as $term_temp ) {
if( $term_temp ) {
$term_temp->term_meta = get_term_meta( $term_temp->term_id );
${$tax.'_obj'}[] = $term_temp;
}
}
}
?>
タームメタ情報を取得~のところは、get_termsで取得できる標準の情報のほかに
タームごとのメタ情報も一度に取得するために使っています。
投稿ページで取得する場合
<?php
//投稿タイプに紐づくすべてのタクソノミースラッグ
$taxonomies = get_taxonomies( array( 'object_type' => array( $post_type ) ) );
//タクソノミーごとにターム情報の配列を格納する
foreach( $taxonomies as $tax ) {
${$tax.'_obj'} = wp_get_object_terms( $post->ID, $tax );
}
?>
アーカイブページでの情報取得の場合との主な違いは、ターム情報を取得する関数
wp_get_object_terms の部分です。
取得したカスタムタクソノミー情報が格納されている変数
上記どちらの場合も
<?php
${カスタムタクソノミー名}_obj
?>
という変数の中に取得したいタクソノミーのターム情報がすべて格納されています。