タクソノミーの取得・出力方法まとめ【WordPress】

WordPressのタクソノミーの取得・出力方法メモです。

【タクソノミーについてはこちら】カスタムタクソノミーとは?WordPressでオリジナルの投稿分類を作る

ここでは以下のカスタム投稿・タクソノミーを作ったサンプルで説明します。

  • カスタム投稿で「料理レシピ(post_type_recipe)」を作成。
  • カスタムタクソノミーで、「食材(ingredients)」「料理名(dishes)」「各国の料理(cuisines)」を作成。

※「」内は「label(name)」です。

get_taxonomies

get_taxonomies() は、サイトにあるタクソノミー情報をまとめて取得します。

サンプルサイトで get_taxonomies() をにどんな情報が入っているか、var_dump() を使って出力した内容がこちらです。

get_taxonomies() で取得、var_dump() で出力
array(11) {
  ["category"]=>
  string(8) "category"
  ["post_tag"]=>
  string(8) "post_tag"
  ["nav_menu"]=>
  string(8) "nav_menu"
  ["link_category"]=>
  string(13) "link_category"
  ["post_format"]=>
  string(11) "post_format"
  ["wp_theme"]=>
  string(8) "wp_theme"
  ["wp_template_part_area"]=>
  string(21) "wp_template_part_area"
  ["wp_pattern_category"]=>
  string(19) "wp_pattern_category"
  ["ingredients"]=>
  string(11) "ingredients"
  ["dishes"]=>
  string(6) "dishes"
  ["cuisines"]=>
  string(8) "cuisines"
}
Expand

'_builtin' => false を指定すると、WordPressのデフォルトにあるタクソノミー以外(カスタムタクソノミー)を表示させることができます。

PHP
$taxonomies = get_taxonomies(array('_builtin' => false));

自分で作成したタクソノミーだけになりました。

上記コードをvar_dumpで出力
array(3) {
  ["ingredients"]=>
  string(11) "ingredients"
  ["dishes"]=>
  string(6) "dishes"
  ["cuisines"]=>
  string(8) "cuisines"
}

特定のタクソノミーの詳細情報を知りたい場合は、第二パラメーターに ‘object’ を指定します。

PHP
// タクソノミー名で指定
get_taxonomies(array('name' => 'ingredients'), 'object');
// ラベルで指定
get_taxonomies(array('label' => '食材'), 'object');

以下のコードで中身を確認できます。

<?php $tax_ingredients = get_taxonomies(array('name' => 'ingredients'), 'object'); ?>
<pre><?php var_dump($tax_ingredients); ?></pre>

上記コードを利用して、タクソノミー名を出力するコードがこちら。

PHP
<?php
  $tax = get_taxonomies(array('label'=> '食材'));
  $tax_name = $tax[key($tax)];
  echo $tax_name;
?>

‘object_type’ を使って、特定のカスタム投稿に付いているタクソノミーを取り出すこともできます。

PHP
get_taxonomies(array('object_type'=>array('post_type_recipe')));

この場合、 get_object_taxonomies() でも代替できます。

get_object_taxonomies

get_object_taxonomies() は、特定の投稿タイプのタクソノミーを取得します。引数に投稿タイプ名を入れます。

PHP
$taxonomy_post = get_object_taxonomies('post');
var_dump( $taxonomy_post );

その投稿に登録されているタクソノミーを出力

PHP
$taxonomy_names = get_object_taxonomies(get_post());

投稿に登録されている全てのタクソノミーのラベルと説明文を出力

PHP
<?php
$taxonomy_objects = get_object_taxonomies('post_type_recipe' ,'objects');
foreach($taxonomy_objects as $taxonomy_object) {
  echo '<h4>'. esc_html($taxonomy_object->label) .'</h4>';
  echo '<p>'. esc_html($taxonomy_object->description) .'</p>';
}
?>

get_query_var

個別ページやアーカイブページでは get_query_var() でカスタムタクソノミー名を取得できます。

PHP
<?php
$taxonomy = get_query_var('taxonomy');
$post_type = get_taxonomy($taxonomy)->object_type[0];
?>

WP_Query クラスを使ってタクソノミーに属する記事を一覧表示

カスタム投稿「料理レシピ」の、「食材」タクソノミーにある「野菜」タームの記事のタイトルを取得・出力した例です。

PHP
<?php
  $args = array(
    'post_type' => 'post_type_recipe',
    'tax_query' => array(
      array(
        'taxonomy' => 'ingredients',
        'field' => 'slug',
        'terms' => 'yasai'
      )
    )
  );
  $the_query = new WP_Query($args);
?>
<?php
  while ($the_query->have_posts()):
    $the_query->the_post();
?>
  <!-- 表示させたい投稿内容 -->
  <h1><?php the_title(); ?></h1>

<!-- 投稿表示終了。メインクエリの値に戻す -->
<?php endwhile; wp_reset_postdata();?>

カテゴリー : WordPress

index