register_taxonomy関数の書き方

WordPressにカスタム分類を登録するには、「register_taxonomy」という関数を使います。
この関数の書き方を紹介します。

1.register_taxonomy関数の概要

register_taxonomy関数は、WordPressにカスタム分類を登録する働きをします。
基本的な書き方は以下の通りです。

register_taxonomy(カスタム分類名, 投稿のタイプ名, パラメータの配列)

「カスタム分類名」は、登録したいカスタム分類に合わせて、その名前を英単語で指定します。
例えば、地域を表すカスタム分類を追加するなら、カスタム投稿タイプ名は「area」等にすると良いでしょう。

「投稿のタイプ名」では、カスタム分類で分類できるようにしたい投稿のタイプを指定します。
WordPress標準の投稿を分類できるようにするなら、タイプ名として「post」を指定します。
また、カスタム投稿タイプを分類できるようにするなら、そのカスタム投稿タイプのタイプ名を指定します。
例えば、「realestate」というカスタム投稿タイプを登録してある時に、そのカスタム投稿タイプを分類できるようにするなら、「投稿のタイプ名」に「realestate」を指定します。

1つのカスタム分類を、複数のタイプの投稿に結び付けることもできます。
その場合は、「投稿のタイプ名」の箇所に、カスタム投稿タイプ名の配列を指定します。
例えば、「video」と「audio」のカスタム投稿タイプを登録してある時に、その両方を同じ1つのカスタム分類で分類できるようにする場合は、「投稿のタイプ名」の箇所を「array('video', 'audio')」と指定します。

また、「パラメータの配列」には、register_taxonomy関数に渡す各種のパラメータを、連想配列の形で指定します。

以下の例は、物件(realestate)のカスタム投稿タイプを、地域(area)のカスタム分類で分類できるようにする場合の書き方の例です。
なお、物件のカスタム投稿タイプは、すでに登録されているものとします。

$args = array(
  'label' => '地域',
  'labels' => array(
    'name' => '地域',
    'singular_name' => '地域',
    'search_items' => '地域を検索',
    'popular_items' => 'よく使われている地域',
    'all_items' => 'すべての地域',
    'parent_item' => '親地域',
    'edit_item' => '地域の編集',
    'update_item' => '更新',
    'add_new_item' => '新規地域を追加',
    'new_item_name' => '新しい地域',
  ),
  'public' => true,
  'show_ui' => true,
  'hierarchical' => true,
);
register_taxonomy('area', 'realestate', $args);

2.パラメータの配列の指定方法

前述したように、register_taxonomy関数の3つ目のパラメータには、各種のパラメータを連想配列に入れて渡します。
その連想配列の要素名と、要素ごとの設定の内容は、以下の通りです。

2-1.label

カスタム分類の名前を指定します。
例えば、地域を表すカスタム分類を追加するなら、label要素の値は「地域」にすれば良いでしょう。

2-2.labels

カスタム分類関連の管理画面に表示するラベルを指定します。
管理画面上での位置と、そこに表示するラベルの対応は、連想配列の形で表します。
この連想配列の要素名と、要素ごと設定の内容は、以下の通りです。
「○○」の部分に、カスタム分類の名前を入れます。

要素名設定内容
nameカスタム分類の複数形
singular_nameカスタム分類の単数形
search_itemsカスタム分類一覧ページの検索ボタンのラベル
popular_items「よく使われる○○」のラベル
all_items「すべての○○」のラベル
parent_item「親○○」のラベル
edit_itemカスタム分類の編集ページの左上に表示されるタイトル
add_new_itemカスタム分類の新規作成のボタンに表示されるラベル
choose_from_most_used「よく使われている○○から選択」のラベル(タグ型のカスタム分類のみ)
separate_items_with_commas「○○が複数ある場合はコンマで区切ってください」のラベル(タグ型のカスタム分類のみ)

各設定と、実際の管理画面上での対応は、以下の各画面のようになっています。

カスタム分類一覧のページ

カスタム分類の編集のページ

カスタム投稿のページ

2-3.public

WordPressのCodexのページでは、「このカスタム分類を管理画面に表示するかどうかを指定する」というような記述があります。
ただ、こちらで試した限りでは、管理画面に表示するかどうかは、後述する「show_ui」で決まるようです。

2-4.show_ui

管理画面にカスタム分類の作成や一覧のページを表示する場合は、この値をtrueに設定します。
一方、この値をfalseに設定すると、管理画面上ではこのカスタム分類を操作することができません。
なお、この値の指定を省略した場合、publicに指定した値と同じ設定になります。

2-5.hierarchical

この値をtrueに設定すると、カテゴリーのように、カスタム分類に親子関係を持たせることができます。
一方、この値をfalseにすると、タグのように、親子関係を持たせないようになります。
デフォルト値はfalseです。

2-6.show_tagcloud

Codexによると、タグ型のカスタム分類を登録した場合、この値をfalseに設定すると、カスタム分類の管理画面にタグクラウドを表示しないとあります。
ただ、実際には値をfalseにしても、カスタム分類の管理画面にタグクラウドが表示されました。

2-7.query_var

「'query_var' => true」に設定すると、「http://ブログのアドレス/?カスタム分類名=個々の分類のスラッグ」のアドレスで、そのカスタム分類のアーカイブページを開くことができるようになります。
また、「'query_var' => 文字列」とすると、「http://ブログのアドレス/?文字列=個々の分類のスラッグ」のアドレスで、そのカスタム分類のアーカイブページを開くことができるようになります。

2-8.rewrite

「'rewrite' => true」に設定すると、「http://ブログのアドレス/カスタム分類名/個々の分類のスラッグ」のアドレスで、そのカスタム分類のアーカイブページを開くことができるようになります。
また、「'rewrite' => array('slug' => 文字列)」とすると、「http://ブログのアドレス/文字列/個々の分類のスラッグ」のアドレスで、そのカスタム分類のアーカイブページを開くことができるようになります。
ただし、rewriteを動作させるには、カスタム分類を登録した後で、flush_rewrite_rules関数を実行する必要があるようです。

2-9.capabilities

カスタム分類を操作できるユーザーの権限を指定します。

3.カスタム投稿タイプ/カスタム分類関係の記事の一覧

カスタム投稿タイプ/カスタム分類関係のその他の記事は、以下のリンクから参照できます。

WordPressで学ぶPHPとMySQLWordPressで学ぶPHPとMySQL」発売中です。
WordPressを通して、PHPとMySQLの基本をマスターするための本(PDF)です。
詳細は特設ページにて。