wordpress カスタム分類(カスタムタクソノミー)

2013年5月21日

概要

  • 「カスタム分類」機能を使うと、カテゴリーのように階層のある分類と、タグのように階層がない分類を追加することができる。
  • 階層を作るかどうかは、登録時に「hierarchical」で指定する。
  • カスタム分類は、カスタム投稿タイプに分類を追加できるだけでなく、既存の投稿/固定ページにも分類を追加できる。(登録時に第2パラメータに分類対象の投稿タイプを指定する。)
  • カスタム投稿でカスタム分類を使用する場合、まず、register_post_type 関数を実行して、その後に register_taxonomy 関数を実行する。

カスタム分類(カスタムタクソノミー)の登録

register_taxonomy($taxonomy, $object_type, $args)
パラメータ
$taxonomy(必須):カスタム分類名
$object_type(必須):分類対象の投稿タイプ名
$args(オプション):各種のパラメータを格納した配列
戻り値: パラメータを格納した配列

第1パラメータ(カスタム分類名:必須)

  • 登録したいカスタム分類名(スラッグ)を任意の半角英数字(大文字やスペースは不可で、32文字以内)で指定。
  • この値は WordPress の内部処理やカテゴリーページなどの URL に使用される。

カスタム分類名(スラッグ)は内部処理で使用されるため、「分類対象の投稿タイプ名」を利用して一定のルールで名前を付けると、内部処理が楽になる。

例えばカテゴリータイプの場合は「カスタム投稿タイプ名_cat」、タグタイプの場合は「カスタム投稿タイプ名_tag」と付けておけば、$postcat = get_post_type() .’_cat’ や $posttag= get_post_type(). ‘_tag’ のようにして使える。

第2パラメータ(投稿タイプ名:必須)

  • カスタム分類として分類したい投稿のタイプ名(スラッグ)を指定
  • WordPress 標準の「投稿」を分類する場合は、タイプ名を「post」を指定
  • 「固定ページ」を分類するならタイプ名を「page」を指定
  • 「カスタム投稿タイプ」を分類するなら、該当する投稿タイプ名(register_post_typeで登録した投稿タイプ名)を指定

第3パラメータ(各種のパラメータを格納した配列:オプション)

label
カスタム分類の名前を指定。(管理画面ラベル名)
ここで指定した名前が、管理画面に分類名としてメニューやタイトルに表示される。日本語使用可能。
labels
管理画面に表示されるラベルを指定。(オプション)
「新規カテゴリーを追加」「カテゴリーの編集」「カテゴリーを検索」などのデフォルトのラベルを変更する場合は指定
name:カスタム分類の複数形。この値は「label」の値を上書きする。
singular_name:カスタム分類の単数形
search_items:カスタム分類一覧ページの検索ボタンのラベル(デフォルト:カテゴリーを検索)
popular_items:「よく使われる○○」のラベル(○○に該当する部分を指定)
all_items :「すべての○○」のラベル
parent_item:「親○○」のラベル
edit_item:カスタム分類の編集ページの左上に表示されるタイトル(デフォルト:カテゴリーの編集)
add_new_item:カスタム分類の新規作成ボタンに表示されるラベル(デフォルト:新規カテゴリーを追加)
choose_from_most_used:「よく使われている○○から選択」のラベル(タグ型のカスタム分類のみ)
separate_items_with_commas :「○○が複数ある場合は、コンマで区切ってください」のラベル(タグ型のカスタム分類のみ)
public
ユーザーが管理画面で入力する場合は「true」を指定。(初期値: true )
プログラムで内部的に使われ、ユーザーは直接入力しない場合は「false」を指定。
show_ui
管理画面にこのカスタム分類のページを表示する場合は「true」を指定。
「false」を指定すると、管理画面上でこのカスタム分類の操作はできなくなる。
初期値(デフォルト)は、public に指定した値。
hierarchical
カスタム分類にカテゴリーのような親子関係(階層)を持たせるには「true」を指定。
タグと同様に親子関係を持たせない場合は「false」を指定。(初期値: false )
rewrite
「true」の場合(デフォルト)、(初期値: true )
「http://ブログのアドレス / カスタム分類名(1つ目のパラメータ) / 個々のカスタム分類のスラッグ / 」でアクセスできる。
「rewrite => array('slug' => 'スラッグ')」と指定すると
「http://ブログのアドレス / スラッグ / 個々のカスタム分類のスラッグ / 」でアクセスできる。
また、「rewrite => array('slug' => 'スラッグ', 'with_front' => false)」と指定すると管理画面のパーマリンク設定を無視する。
「with_front」はパーマリンク設定で「投稿」に対して指定した設定をカスタム分類でも引き継ぐか引き継がないかを指定する。
capabilities
カスタムタクソノミーの権限を作成
4種類の子パラメータで権限を指定する
manage_terms: カテゴリーのメニューの表示
edit_terms: カテゴリーの編集
delete_terms: カテゴリーの削除
assing_terms: 記事の編集画面でのカテゴリーの利用
'capabilities' => array(
   'manage_terms' => 'manage_interior_cat',
   'edit_terms' => 'edit_interior_cat',
   'delete_terms' => 'delete_interior_cat',
   'assing_terms' => 'assing_interior_cat'
  )

初期化時の実行

register_taxonomy 関数は、register_post_type 関数と同様、WordPress の初期化時に実行される。

カスタム投稿をカスタム分類で分ける場合、まず、register_post_type 関数を実行して、その後に register_taxonomy 関数を実行する。

function 関数名() {
  register_post_type(カスタム投稿タイプ名, パラメータの配列);
  register_taxonomy(カスタム分類名 ,投稿タイプ名, パラメータの配列);
  flush_rewrite_rules();  
}
add_action('init', 関数名);

カスタム分類の追加例

$args = array(//パラメータの配列
  'label' => 'ニュースカテゴリー',
  'labels' => array(
    'popular_items' => 'よく使うニュースカテゴリー',
    'edit_item' =>'ニュースカテゴリーを編集',
    'add_new_item' => '新規ニュースカテゴリーを追加',
    'search_items' => 'ニュースカテゴリーを検索',
  ),
  'public' => true,
  'hierarchical' => true  //カテゴリーのような親子関係(階層)を持たせる
);
register_taxonomy( 'news_cat', 'news', $args); 
//register_taxonomy(カスタム分類名 ,投稿タイプ名, パラメータの配列); 

カスタム投稿とカスタム分類を登録する例

function new_post_type() {
  //news(ニュース)というカスタム投稿タイプを登録
  register_post_type(
    'news',//投稿タイプ名(識別子)
    array(
      'label' => 'ニュース',  //カスタム投稿タイプの名前(これが管理画面のメニューに表示される)
      'labels' => array(  //管理画面に表示されるラベルを指定
        'add_new_item' => '新規ニュースを追加',
        'edit_item' =>'ニュースの編集',
        'view_item' =>  'ニュースを表示',
        'search_items' => 'ニュースを検索',
        'not_found' => 'ニュースは見つかりませんでした。',
        'not_found_in_trash' => 'ゴミ箱にニュースはありませんでした。',
      ),
      'public' => true,// 管理画面に表示しサイト上にも表示する
      'hierarchicla' => false,//コンテンツを階層構造にするかどうか(投稿記事と同様に時系列に)
      'has_archive' => true,//trueにすると投稿した記事の一覧ページを作成
      'supports' => array(//記事編集画面に表示する項目を配列で指定することができる
        'title',//タイトル
        'editor',//本文(の編集機能)
        'thumbnail',//アイキャッチ画像
        'excerpt'//抜粋
      ),
      'menu_position' => 5//「投稿」の下に追加
    )
  );
  //news_cat(ニュースカテゴリー)というカスタム分類を登録
  register_taxonomy(
    'news_cat',  //カスタム分類名
    'news',  //カスタム分類を利用する投稿タイプ
    array(
      'label' =>  'ニュースカテゴリー',  //管理画面ラベル名
      'labels' => array(
        'popular_items' =>  'よく使うニュースカテゴリー',
        'edit_item' => 'ニュースカテゴリーを編集',
        'add_new_item' => '新規ニュースカテゴリーを追加',
        'search_items' =>  'ニュースカテゴリーを検索',
      ),
      'public' => true,
      'hierarchical' => true  //カテゴリーのような親子関係(階層)を持たせる
    )
  );
  //news_tag(ニュースタグ)というカスタム分類を登録
  register_taxonomy(
    'news_tag',  //カスタム分類名
    'news',  //カスタム分類を利用する投稿タイプ
    array(
      'label' =>  'ニュースタグ',  //管理画面ラベル名
      'labels' => array(
        'popular_items' =>  'よく使うニュースタグ',
        'edit_item' => 'ニュースタグを編集',
        'add_new_item' => '新規ニュースタグを追加',
        'search_items' =>  'ニュースタグを検索',
      ),
      'public' => true,
      'hierarchical' => false  //タグ形式なので親子関係(階層)を持たせない
    )
  );
  flush_rewrite_rules();
}
add_action('init', 'new_post_type');

標準で用意された投稿や固定ページに追加する

独自のタクソノミー(カスタムタクソノミー)は、標準で用意された投稿や固定ページにも追加することができる。

投稿記事に「ニュースの分類」というタクソノミーを追加するには、「タクソノミーを利用する投稿タイプ」を「post」と指定し、以下のように記述すると「投稿」のメニューにカテゴリーとは別に「ニュースの分類」というタクソノミーが追加される。

register_taxonomy(
  'news_cat',
  'post',
  array(
    'label' => 'ニュースの分類',
    'hierarchical' =>true
  )
);

カスタム分類のアーカイブページのテンプレート階層

カスタム分類のアーカイブページを出力する際は、以下のテンプレート階層に沿って、テンプレートが選ばれる。

  1. taxonomy-カスタム分類名-ターム(個々の分類項目名).php
  2. taxonomy-カスタム分類名.php
  3. taxonomy.php
  4. archive.php
  5. index.php

関連ページ:カスタム投稿タイプの一覧ページの作成

投稿ごとのカスタム分類のリストを得る

get_the_term_list( $id, $taxonomy, $before, $sep, $after )
パラメータ
$id(必須):投稿の ID
$taxonomy(必須):カスタム分類名
$before(オプション):前出力文字列
$sep(オプション):セパレータ
$after(オプション):後出力文字列
戻り値
カスタム分類(分類キーワード、個々の項目)を出力するための HTML。
分類キーワードは、それぞれの分類キーワード一覧ページにリンクする。
  • WordPress ループ内でこの関数を使う場合は、投稿の ID に「$post->ID」を渡す
  • 結果は戻り地として返されるので、出力する場合は、echo 文で出力する

例:「area」という投稿を地域で分類するカスタム分類があり、個々の投稿が属する地域を、先頭に「地域:」を出力し、地域名の間をコンマで区切って出力する場合

<?php echo get_the_term_list($post->ID, 'area', '地域:', ', ' , ''); ?>

投稿記事が特定のタームに属しているかどうかを判断する

投稿記事が特定のターム(カテゴリー、タグ、カスタム分類の個々の項目)に属しているかどうかを判断する。

has_term($term, $taxonomy ,$post )
パラメータ
$term(オプション):ターム(カテゴリー、タグ、カスタム分類の個々の項目)のID/名前/スラッグか、それらの配列を指定
$taxonomy(オプション):タクソノミー名として'カスタム分類名'や'category'、'post_tag'などを指定
$post(オプション):投稿IDか投稿情報のオブジェクトを指定
すべて省略した場合は、何らかのタームに属しているかを判定する
戻り値
パラメータ $term で指定されたタクソノミーに属している場合は true、属していない場合は false。
//カスタム分類「news_cat」に属しているかどうか
<?php if(has_term('','news_cat')): ?>

//カスタム分類「news_cat」の「international」に属しているかどうか
<?php if(has_term('international','news_cat')): ?>

カスタム分類のスラッグからカスタム投稿名を取得

カスタム投稿「event」にカスタム分類「eventinfo」を登録してある場合の例。
(カスタム投稿タイプとカスタム分類が1対1の場合)

$post_types = get_taxonomy( 'eventinfo' )->object_type;
echo $post_types[0];   // event が出力される。

反対に、カスタム投稿名からカスタム分類のスラッグを取得するには、

$taxes = get_object_taxonomies( 'event' );
echo $taxes[0];   //eventinfo が出力される。
get_taxonomy($taxonomy)
タクソノミー名からタクソノミーオブジェクトを取得
パラメータ 
$taxonomy(必須):タクソノミー名 (スラッグ)
戻り値
そのタクソノミーが存在すればタクソノミーオブジェクト、存在しなければ「false」
オブジェクトの「object_type」プロパティの最初の配列に、カスタム投稿のスラッグが入っている。

get_taxonomy

get_object_taxonomies($object, $output)
投稿タイプ名からそのタクソノミー名を取得
パラメータ 
$object(必須):投稿タイプ名またはオブジェクト
$output (オプション): 'names' か 'objects'(デフォルトは 'names' )
戻り値
その投稿タイプの全てのタクソノミー名

get_object_taxonomies

子孫タクソノミーIDの取得

get_term_children( $term_id, $taxonomy )
パラメータ 
$term_id(必須):タームのID
$taxonomy(必須):タクソノミー名(親子関係があるタクソノミー)
戻り値
子孫タクソノミーのIDが格納された配列
子タクソノミーがない場合は空の配列を返し、パラメータ$taxonomyで指定された名前が無効な場合はエラー内容を示すWP_Errorのオブジェクトを返す

個別ページ(single.php)で記事が属するカスタム分類を表示する例

前提:
カスタムタクソノミーで作成したカテゴリーやタグのスラッグ(カスタム分類名)の値は「カスタム投稿タイプのスラッグ_cat」、「カスタム投稿タイプのスラッグ_tag」という形で登録してある。

  • 表示中の記事の投稿タイプのスラッグを「get_post_type()」で取得し、「get_post_type().’_cat’」 「get_post_type().’_tag’」とする。
  • それぞれの値を「$postcat」「$posttag」に代入して、 「get_the_term_list()」のパラメータとして指定して出力する。
<?php
$postcat = get_post_type() . '_cat';
$posttag = get_post_type() . '_tag';
?>
//カテゴリータイプのものは「CATEGORY:」と表示して、カンマで区切って出力
<?php echo get_the_term_list($post->ID, $postcat, 'CATEGORY:', ', '); ?> 
//カテゴリータイプとタグタイプの両方がある場合のみに、間の区切り文字「|」を出力 
<?php if(has_term('', $postcat) && has_term('', $posttag)): ?> |   
<?php endif; ?>
//タグタイプのものは「TAG:」と表示して、カンマで区切って出力
<?php echo get_the_term_list($post->ID, $posttag, ' TAG:', ', '); ?> 

カテゴリー別ページでのカスタム分類のカテゴリー名の表示

  • single_term_title( ) を使う。
  • カスタム分類のページのみで表示するには、「is_tax()」を使う。
<?php if(is_tax()): ?>
<h2><?php single_term_title( ); ?></h2>  //表示中のページのカテゴリー名を出力
<?php endif; ?>

カスタム分類のアーカイブページを出力しているかどうかを判断する(is_tax)

is_tax( $taxonomy, $term )
カスタム分類のアーカイブページを出力しているかどうかを判断する
パラメータ
$taxonomy(オプション):カスタム分類のスラッグ(文字列)か、スラッグの配列を指定
$term(オプション):タームのID、名前、スラッグの何れか、それらの配列を指定
戻り値
条件を満たせば true、満たしていなければ false
  • パラメータを指定しない場合
    カスタム分類のタイプに関係なく、カスタム分類のアーカイブページを出力していれば、戻り値が true になる。
  • カスタム分類のタイプで判断する方法
    1つ目のパラメータで、特定のタイプのカスタム分類のアーカイブページを出力しているときかを判断できる。
    if(is_tax(‘area’)):
  • タームの指定
    2つ目のパラメータで、カスタム分類の個々の特定のタームを指定することで、そのタームが属するカスタム分類のアーカイブページを出力しているかどうかを判断できる。
    if(is_tax(‘area’, ‘tokyo’)):
single_term_title($prefix, $display)
カテゴリーやタグ、カスタムタクソノミーで作成した項目名(ターム)を表示する
パラメータ
$prefix(オプション):タームの前に連結する文字列を指定
$display(オプション):タームを表示する場合はtrue(デフォルト)を、取得する場合はfalseを指定
戻り値
パラメータ $display が false の場合はタームを返す。$displayがtrueの場合、返り値はない。

taxonomy.php など(カテゴリーアーカイブページ、投稿タグアーカイブページ、その他のタクソノミーアーカイブページ)でタイトルを表示するのに使用できる。

カテゴリーページとタグページで表示を変える例

カスタムタクソノミーで作成したタクソノミーをカテゴリー形式(’hierarchical’ => true)とタグ形式(’hierarchical’ => false)で条件分岐するには「is_taxonomy_hierarchical()」を利用する。

アーカイブページ(archive.php)でカスタム分類のページの場合「if(is_tax())」、それがカテゴリー形式である場合、「カテゴリー」と出力し、タグ形式の場合「タグ」と出力する例。

<div id="content">
<?php if(is_tax()): ?>
<p id="archivetitle">
<span>
<?php if(is_taxonomy_hierarchical($taxonomy)): ?>
カテゴリー
<?php else: ?>
タグ
<?php endif; ?>
</span>
<?php single_term_title(); ?>
</p>
<?php endif; ?>

カスタムタクソノミーのアーカイブページでは変数「$taxonomy」に表示中のページのタクソノミー名が入っているのでパラメータを「$taxonomy」と指定することができる。

is_taxonomy_hierarchical ( $taxonomy )
パラメータ
$taxonomy(必須):タクソノミー名(タクソノミーオブジェクトの名前)
戻り値
階層構造を持つ場合はtrue、そうでない場合はfalse。
  • カテゴリー形式(’hierarchical’ => true)の場合は階層構造を持ち、タグ形式(’hierarchical’ => false)の場合は階層構造を持たない。
  • カスタムタクソノミーを作成して、カテゴリー形式かタグ形式で条件分岐する場合などに利用できる。
  • カスタムタクソノミーのアーカイブページでは変数「$taxonomy」に表示中のページのタクソノミー名が入っているのでパラメータを「$taxonomy」と指定することができる。
  • また、$taxonomy = $wp_query->get_queried_object(); として $taxonomy->name; でタクソノミー名が取得できる。

カテゴリー別ページ(taxonomy.php)でカスタム分類のカテゴリー名(ターム)と説明を表示する例

カテゴリー別ページのカテゴリー名(ターム)と説明を表示するには、get_term_by() を利用して、表示中のページのカテゴリーに関するデータを $catinfo に取得して、そのメンバー変数(プロパティ)を使って出力する。

//表示中のページのタームオブジェクトを取得
<?php $catinfo = get_term_by('slug', $term, $taxonomy); ?>
  
//表示中のページのカテゴリー名(ターム)を出力
<h2><?php echo $catinfo->name; ?></h2> 

//表示中のページのカテゴリー名(ターム)の説明を出力 
<p><?php echo $catinfo->description; ?></p>  
get_term_by($field, $value, $taxonomy , $output)
パラメータ
$field:検索する値のフィールド名を示す'slug'、'name'など。
$value:検索する値(タームの $field で指定した値)
$taxonomy:タクソノミー名(スラッグ)
$output:出力型を示すOBJECT、ARRAY_A、ARRAY_Nの何れか(省略時はOBJECT)
戻り値
カテゴリー・タグが見つかった場合はそのカテゴリー・タグの情報をパラメータ $output で指定した型で返す。見つからなかった場合は falseを返す。

taxonomy.php で生成されるカテゴリー別ページでは、表示中のタームのスラッグが変数 $term に、タームを管理しているタクソノミーの名前が変数 $taxonomy に入るので、get_term_by(‘slug’, $term, $taxonomy) と指定すれば、表示中のタームに関するデータを取得することができる。

get_terms() 関数を使って以下のように記述しても表示中のページのカテゴリー名を出力できる。

<?php $terms = get_terms($taxonomy,array('slug' => $term)); ?>
<h2><?php echo $terms&#91;0&#93;->name; ?></h2>  //表示中のページのカテゴリー名を出力

カテゴリー名だけを出力する場合、1番簡単な方法は single_term_title( ) を使う。

<h2><?php single_term_title( ); ?></h2>  //表示中のページのカテゴリー名を出力

カスタム分類のリストの出力(wp_list_categories / wp_tag_cloud)

  • カテゴリーのリストを出力するには、wp_list_categories 関数を使う
  • タグのリストをタグクラウドとして出力するには、wp_tag_cloud 関数を使う
  • パラメータとして渡す連想配列には、「’taxonomy’ => カスタム分類名」を追加する
<?php wp_list_categories(array('taxonomy' => 'news')); ?>

カテゴリーページや個別ページでそのページの属するカスタム分類のリストを表示する

カスタム投稿のリストは「wp_list_categories()」または「wp_tag_cloud()」を利用する

前提:カスタムタクソノミーで作成したカテゴリーやタグのスラッグ(カスタム分類名)の値を「カスタム投稿タイプのスラッグ_cat」、「カスタム投稿タイプのスラッグ_tag」という形で登録してある。

カテゴリータイプの場合(hierarchical: true)
「wp_list_categories()」の「taxonomy」パラメータを「get_post_type() .’_cat’ 」と指定する。

<ul id="menu">
<?php $args = array(
'taxonomy' => get_post_type(). '_cat',
'title_li' => '<h2>カテゴリー</h2>'
); ?>
<?php wp_list_categories($args); ?>
</ul>

タグタイプの場合(hierarchical: false)
「wp_tag_cloud()」の「taxonomy」パラメータを「get_post_type() .’_tag’ 」と指定する。

<ul id="menu">
<?php $args = array(
'taxonomy' => get_post_type(). '_tag',
); ?>
<?php wp_tag_cloud($args); ?>
</ul>

カスタム分類のリストの出力(get_terms)

  • get_terms(‘news’)を利用して、すべてのカテゴリーに関するデータを$mycatsに取得。
  • foreach() で各カテゴリーに関するデータを取り出し、カテゴリー名は「 $mycat->name;」で出力
  • カテゴリーページへのリンクは「$mycat」には含まれていないので、「get_term_link()」を利用して、パラメータを「カテゴリーのスラッグ、タクソノミーのスラッグ」という形で指定する。

例:(但し、これだけなら wp_list_categories(array(‘taxonomy’ => ‘news’));で同じ結果が得られる)

<ul>
<?php $mycats = get_terms('news'); ?> 
<?php foreach($mycats as $mycat): ?>
<li>
<a href="<?php echo esc_url(get_term_link($mycat -> slug, $mycat -> taxonomy)); ?>">
<?php echo esc_html($mycat -> name); ?>
</a>
</li>
<?php endforeach; ?>
</ul>
get_terms( $taxonomies, $args )
指定したカスタム分類のタームオブジェクトを取得する。
パラメータ
$taxonomies(必須):カスタム分類名(文字列または配列)
$args(オプション):各種のパラメータを格納した連想配列
戻り値
カスタム分類のオブジェクトの配列
get_term_link( $term, $taxonomy )
カスタム分類のアーカイブページのアドレスを取得する
パラメータ
$term(必須):カスタム分類の ID/スラッグ/オブジェクトのいずれか
$taxonomy(必須):カスタム分類名(スラッグ)

カテゴリー(カスタム分類)をそのカテゴリーに属する記事のアイキャッチ画像を付けて表示する

前述のリストの出力に、そのカテゴリーの属する記事の情報を取得してアイキャッチ画像を表示。

  • カテゴリーに属する記事と記事に関するデータを取得するため、ループを記述。
  • WP_Query() の tax_query パラメータで「taxonomy」パラメータを「$mycat->taxonomy」、「terms」パラメータを「$mycat->slug」と指定してそのカテゴリーの属する記事の情報を取得。
  • 取得したデータからは、the_post_thumbnail() でアイキャッチ画像を出力するように指定。
  • ループは「1ページに表示する最大投稿数」に指定した件数分を表示してしまうので、WP_Query() のパラメータに「’posts_per_page’ => 1」を指定し、最新の投稿1件を取得する。
<ul>
<?php $mycats = get_terms('news'); ?>
<?php foreach($mycats as $mycat): ?>
<li>
<a href="<?php echo esc_url(get_term_link($mycat -> slug, $mycat -> taxonomy)); ?>">
<?php echo esc_html($mycat -> name); ?>
<br />
<?php $args = array(
  'tax_query' => array(
  array(
    'taxonomy' => $mycat -> taxonomy,
    'field' => 'slug',
    'terms' => $mycat -> slug
    )
  ),
  'posts_per_page' => 1
);
?>
<?php $my_query = new WP_Query($args); ?>
<?php if($my_query -> have_posts()): while($my_query -> have_posts()):$my_query -> the_post(); ?>
<?php the_post_thumbnail(); ?>
<?php endwhile; endif; ?>
</a>
</li>
<?php endforeach; ?>
</ul>

WP_Query() の tax_query パラメータを使わず、以下のように「taxonomy」パラメータと「カスタムタクソノミー名」パラメータを使っても同じ。

$args = array(
 'taxonomy' => $mycat -> taxonomy,
 $mycat -> taxonomy => $mycat -> slug,
 'posts_per_page' => 1
)

タクソノミーとターム

タクソノミー(分類)には大きく分けて「ビルトイン分類」と「カスタム分類」がある。

「ビルトイン分類」(WordPress に標準で備わっているもの)
カテゴリー:category
投稿タグ:post_tag
リンクカテゴリー:link_category
「カスタム分類」
独自に作成したもの(register_taxonomy() で登録)

タームは、タクソノミーの個々の分類項目のこと。

「category」 で「ニュース」や「フォト」などのカテゴリーを追加した場合、「category」はタクソノミー名で、 個々の「ニュース」や「フォト」がターム。

「interior_cat」というカスタムタクソノミーを作成して、その項目(カテゴリーまたはタグ)として「desk」や「table」を追加した場合、「interior_cat」はタクソノミー名で、「desk」や「table」がターム。

ここでややこしいというか混乱しやすいのは、「category」 の個々のカテゴリーの「ニュース」などのオブジェクトを「カテゴリーオブジェクト」というが、「カテゴリーオブジェクト」は taxonomy が category のタームオブジェクトであるということ。

「category」や「カスタム分類」のオブジェクトは「タクソノミーオブジェクト」。