1. WordPress

【WordPress】register_taxonomy() で独自の分類(カスタムタクソノミー)を追加する方法

Share

WordPressは投稿の分類をカテゴリやタグで管理できますが、もっと細かく管理したい場合は 独自の分類(カスタムタクソノミー) を追加できます。

これを実現するのが register_taxonomy() 関数です。

この記事では、register_taxonomy() の基本的な使い方から、実際に独自の分類を作成して使うまでをわかりやすく解説します。

独自の分類(カスタムタクソノミー)とは?

カスタムタクソノミーは、WordPressの「投稿」「固定ページ」以外に独自のグループ分けを作る仕組みです。

例えば、商品投稿に「ブランド」や「タイプ」を分類として追加したり、イベント投稿に「地域」や「ジャンル」を設定したりできます。

カスタム投稿にカスタムタクソノミーを追加する時によく使われます。

register_taxonomy() の基本構文

register_taxonomy( $taxonomy, $object_type, $args );
  • $taxonomy
    独自分類のスラッグ名(例:genrebrand
  • $object_type
    この分類を関連付けたい投稿タイプ(例:postcustom_post_type
  • $args
    タクソノミーの設定をまとめた配列(ラベルや表示方法など)

独自分類を追加する基本例

function create_custom_taxonomy() {
  $labels = array(
    'name'              => 'ジャンル',
    'singular_name'     => 'ジャンル',
    'search_items'      => 'ジャンルを検索',
    'all_items'         => 'すべてのジャンル',
    'edit_item'         => 'ジャンルを編集',
    'update_item'       => 'ジャンルを更新',
    'add_new_item'      => '新規ジャンルを追加',
    'new_item_name'     => '新しいジャンル名',
    'menu_name'         => 'ジャンル',
  );

  $args = array(
    'hierarchical'      => true,
    'labels'            => $labels,
    'show_ui'           => true,
    'show_admin_column' => true,
    'query_var'         => true,
    'rewrite'           => array('slug' => 'genre'),
  );

  register_taxonomy('genre', array('post'), $args);
}

add_action('init', 'create_custom_taxonomy');

コードのポイント

  • hierarchicaltrue にするとカテゴリのように親子関係が作れます。
  • show_uitrue にすると管理画面に編集画面が表示されます。
  • show_admin_column で投稿一覧画面に表示の有無を制御できます。
  • rewrite'slug' はURLに表示される部分で、SEO的にも重要です。

カスタム投稿タイプと組み合わせて使う例

カスタム投稿タイプ「book」に「genre」を追加したい場合:

register_taxonomy('genre', array('book'), $args);

カスタム投稿タイプの登録は register_post_type() を使いますが、タクソノミーはこれとセットで設定することが多いです。

以下は「カスタムタクソノミーの一覧ページの作り方」に関する補足解説です。記事の最後などに自然に追加できます。


カスタムタクソノミーの一覧ページの作り方

カスタムタクソノミーを追加すると、自動的にその分類ごとのアーカイブページ(一覧ページ)が生成されます。

例えば、genre というタクソノミーの場合、URLは通常 https://example.com/genre/分類スラッグ となります。

一覧ページをカスタマイズするテンプレートファイル

WordPressはテンプレート階層に従い、以下の順でテンプレートファイルを読み込みます。

  1. taxonomy-{taxonomy}-{term}.php
    → 特定のタクソノミーと分類用のテンプレート
  2. taxonomy-{taxonomy}.php
    → タクソノミー単位の一覧テンプレート
  3. taxonomy.php
    → すべてのタクソノミー共通の一覧テンプレート
  4. archive.php
    → 投稿タイプのアーカイブ共通テンプレート
  5. index.php
    → 最終的なフォールバック

テンプレート例:taxonomy-genre.php

<?php get_header(); ?>

<h1><?php single_term_title(); ?> の一覧</h1>

<?php if (have_posts()) : ?>
  <ul>
    <?php while (have_posts()) : the_post(); ?>
      <li>
        <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
      </li>
    <?php endwhile; ?>
  </ul>

  <?php the_posts_pagination(); ?>

<?php else : ?>
  <p>該当する投稿はありません。</p>
<?php endif; ?>

<?php get_footer(); ?>

このようにテンプレートを用意すれば、タクソノミーの分類ごとに独自の一覧ページを作成できます。

注意点

  • rewriteslug 設定が URL に影響するので、パーマリンク設定を変更した場合は再設定が必要です。
  • キャッシュやパーマリンクの設定を変更した際は、管理画面の「設定 > パーマリンク」で「変更を保存」を押してリライトルールを更新してください。

この補足で、カスタムタクソノミーの一覧ページ作成の流れが理解しやすくなると思います。

管理画面での利用イメージ

追加したタクソノミーは投稿編集画面のサイドバーに表示され、チェックボックスやドロップダウンで分類を選択できます。

また、投稿一覧画面にも新たな列として追加され、分類ごとに絞り込みも可能です。

まとめ

register_taxonomy() を使えば、WordPressサイトをより細かく管理できる独自分類を簡単に追加可能です。

カテゴリやタグだけでは足りないサイトの機能拡張に、ぜひチャレンジしてみてください。

参考リンク