WordPress

✅【超わかりやすく解説!】WordPressのタームとタクソノミーって何?初心者でもできるカスタムタクソノミーの作り方

目次[-]

「タクソノミー?ターム?なんだかむずかしそう…」😵

WordPressでサイト制作をしていると、「タクソノミー」「ターム」という言葉をよく目にしますよね。でも正直、この用語って初心者にとってはかなり混乱しがちです!

この記事では、タクソノミーとタームの概念を超わかりやすく解説し、実際にカスタムタクソノミーを作る方法までご紹介します。ぜひ最後まで読んでください!💪

📋 この記事でわかること

  • タクソノミーとタームの正体と関係性
  • カテゴリーとタグの違い(実はどちらもタクソノミーだった!)
  • カスタムタクソノミーが必要な場面と具体的な使用例
  • プラグインを使った簡単なカスタムタクソノミーの作り方
  • コードを使ったカスタムタクソノミーの作り方(コピペでOK)
  • タクソノミーをテーマに表示する方法

タクソノミーとタームって何?超シンプル解説!🤔

🔷 まずは例え話で理解しよう

タクソノミーとタームの関係を理解するには、「引き出し」と「中身」のたとえが分かりやすいです:

  • タクソノミー = 分類するための「引き出し」や「箱」
  • ターム = その引き出しの「中身」や「ラベル」

例えば、お店で服を分類するとき:

  • 「服の種類」という引き出し(タクソノミー)があって
  • その中に「Tシャツ」「パンツ」「ジャケット」などのラベル(ターム)がある

🔷 WordPressでの具体例

WordPressでは最初から2つのタクソノミーが用意されています:

タクソノミー説明ターム例
カテゴリー (category)大まかな分類「ニュース」「レシピ」「レビュー」など
タグ (post_tag)詳細なキーワード「初心者向け」「おすすめ」「2025年」など

つまり、カテゴリーとタグもタクソノミーの一種だったんです!多くの初心者がここで混乱します。

カテゴリーとタグの違い:実はタクソノミーの種類が違う!📊

WordPress標準のタクソノミーである「カテゴリー」と「タグ」には重要な違いがあります:

特徴カテゴリータグ
階層構造あり(親子関係あり)なし(フラット)
必須か任意か最低1つは必要完全に任意(なくてもOK)
投稿画面での表示チェックボックステキスト入力
適した用途大まかな分類詳細なキーワード

🔷 カテゴリー(hierarchical taxonomy)の例

「料理」カテゴリー
 ├── 「和食」(子カテゴリー)
 │   ├── 「寿司」(孫カテゴリー)
 │   └── 「天ぷら」(孫カテゴリー)
 └── 「洋食」(子カテゴリー)
     ├── 「パスタ」
     └── 「ピザ」

🔷 タグ(non-hierarchical taxonomy)の例

タグはフラットな構造で、それぞれが独立しています:

「簡単」「10分以内」「子供向け」「ヘルシー」「朝食」「おやつ」

なぜカスタムタクソノミーが必要なの?🧐

WordPress標準のカテゴリーとタグだけでは足りない場合があります。以下に具体的な例を示します。

🔷 レシピサイトの場合

標準タクソノミー

  • カテゴリー:「和食」「洋食」「中華」など
  • タグ:「簡単」「ヘルシー」「おもてなし」など

追加したいカスタムタクソノミー

  • 調理時間タクソノミー:「5分以内」「30分以内」「1時間以上」などのターム
  • 調理方法タクソノミー:「煮る」「焼く」「蒸す」「炒める」などのターム
  • 季節タクソノミー:「春」「夏」「秋」「冬」などのターム

🔷 不動産サイトの場合

標準タクソノミー

  • カテゴリー:「マンション」「一戸建て」「土地」など
  • タグ:「駅近」「ペット可」「リフォーム済み」など

追加したいカスタムタクソノミー

  • エリアタクソノミー:「東京」「神奈川」「埼玉」などのターム
  • 間取りタクソノミー:「1LDK」「2LDK」「3LDK」などのターム
  • 築年数タクソノミー:「新築」「3年以内」「5年以内」などのターム

このように、コンテンツの特性に合わせた独自の分類方法を作れるのがカスタムタクソノミーの魅力です!

プラグインでカンタン!カスタムタクソノミーの作り方🔧

まずは簡単な方法から!プラグインを使ったカスタムタクソノミーの作り方を紹介します。

🔷 準備するもの

  • Custom Post Type UIプラグイン(無料)

🔷 手順

  1. プラグインのインストール
    • 管理画面メニュー → 「プラグイン」→「新規追加」
    • 「Custom Post Type UI」で検索してインストール・有効化
  2. タクソノミーの作成
    • 管理画面メニュー → 「CPT UI」→「タクソノミーを追加」
    • 基本設定を入力:
設定項目入力例説明
タクソノミースラッグcooking_time英数字とアンダースコアのみ使用可能、必須項目
複数形ラベル調理時間管理画面に表示される名前、必須項目
単数形ラベル調理時間管理画面に表示される名前、必須項目
接続先の投稿タイプ投稿どの投稿タイプにこのタクソノミーを使うか
階層構造はい/いいえカテゴリーのような階層を持つか、タグのような階層なしか
URLスラッグcooking-time公開URLの一部
  1. 保存して完了!

これで管理画面に新しいタクソノミーが追加され、投稿画面で使えるようになります。

上級者向け:コードでカスタムタクソノミーを作る方法📝

プラグインを使わずに、直接コードでカスタムタクソノミーを作ることもできます。テーマのfunctions.phpまたは子テーマに追加します。

🔷 階層型タクソノミー(カテゴリータイプ)のコード例

// カスタムタクソノミー「調理時間」を登録
function create_cooking_time_taxonomy() {
    $labels = array(
        'name'              => '調理時間',
        'singular_name'     => '調理時間',
        'search_items'      => '調理時間を検索',
        'all_items'         => 'すべての調理時間',
        'parent_item'       => '親の調理時間',
        'parent_item_colon' => '親の調理時間:',
        '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' => 'cooking-time'),
    );

    register_taxonomy('cooking_time', array('post'), $args);
}
add_action('init', 'create_cooking_time_taxonomy', 0);

🔷 非階層型タクソノミー(タグタイプ)のコード例

// カスタムタクソノミー「食材」を登録
function create_ingredient_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'      => false, // タグタイプ(階層なし)
        'labels'            => $labels,
        'show_ui'           => true,
        'show_admin_column' => true,
        'query_var'         => true,
        'rewrite'           => array('slug' => 'ingredient'),
    );

    register_taxonomy('ingredient', array('post'), $args);
}
add_action('init', 'create_ingredient_taxonomy', 0);

このコードをコピペして、名前や設定を変更するだけで、独自のカスタムタクソノミーが作れます。コードを使う利点は、プラグインに依存せず、より細かい制御ができることです。

🔷 register_taxonomy関数の主な引数

引数説明
第1引数タクソノミースラッグ(一意の識別子)
第2引数接続する投稿タイプ(配列で複数指定可能)
第3引数設定オプション(配列)

🔷 主な設定オプション

オプション説明
hierarchical階層構造をサポートするか(trueでカテゴリー型、falseでタグ型)
labels管理画面での表示ラベル
show_ui管理画面に表示するか
show_admin_column投稿一覧にカラムとして表示するか
rewriteパーマリンク構造

カスタムタクソノミーをテーマに表示する方法🎨

カスタムタクソノミーを作成したら、それをテーマに表示してみましょう。

🔷 単一投稿ページでタクソノミーのタームを表示

<?php
// 投稿に設定された「調理時間」タクソノミーのタームを取得して表示
$cooking_times = get_the_terms(get_the_ID(), 'cooking_time');
if ($cooking_times && !is_wp_error($cooking_times)) {
    echo '<div class="cooking-time">';
    echo '<span class="label">調理時間:</span>';
    foreach ($cooking_times as $term) {
        echo '<a href="' . get_term_link($term) . '">' . $term->name . '</a>';
    }
    echo '</div>';
}
?>

🔷 サイドバーウィジェットでタクソノミーの一覧を表示

<div class="widget taxonomy-widget">
    <h3 class="widget-title">調理時間で探す</h3>
    <ul>
        <?php
        $terms = get_terms(array(
            'taxonomy' => 'cooking_time',
            'hide_empty' => true,
        ));
        
        if (!empty($terms) && !is_wp_error($terms)) {
            foreach ($terms as $term) {
                echo '<li><a href="' . get_term_link($term) . '">' . 
                     $term->name . ' (' . $term->count . ')</a></li>';
            }
        }
        ?>
    </ul>
</div>

🔷 特定のタームに属する投稿一覧を表示

<?php
// 「30分以内」タームに属する投稿を取得して表示
$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'cooking_time',
            'field'    => 'slug',
            'terms'    => '30min',
        ),
    ),
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    echo '<h2>30分以内で作れるレシピ</h2>';
    echo '<div class="recipe-list">';
    while ($query->have_posts()) {
        $query->the_post();
        echo '<div class="recipe-item">';
        echo '<a href="' . get_permalink() . '">' . get_the_title() . '</a>';
        echo '</div>';
    }
    echo '</div>';
}
wp_reset_postdata();
?>

🔷 よく使うタクソノミー関連の関数

関数用途
get_the_terms()投稿に設定されたタームを取得
get_terms()タクソノミーの全タームを取得
get_term_link()タームのURLを取得
wp_get_post_terms()投稿に紐づくタームを取得
wp_set_post_terms()投稿にタームを設定

よくある疑問と回答❓

🔷 「カスタムタクソノミーとカスタム投稿タイプの違いは?」

項目カスタムタクソノミーカスタム投稿タイプ
定義コンテンツを「分類する方法」コンテンツの「種類」自体
「調理時間」「エリア」「サイズ」「レシピ」「物件」「商品」
用途既存・新規コンテンツの整理コンテンツ自体の新規作成

カスタム投稿タイプとカスタムタクソノミーは、多くの場合一緒に使われます。例えば、「レシピ」というカスタム投稿タイプを作り、その分類方法として「調理時間」というカスタムタクソノミーを作る、というように。

🔷 「タクソノミーアーカイブって何?」

タクソノミーアーカイブとは、特定のタクソノミーのタームに属する投稿一覧ページのことです。例えば:

  • https://example.com/category/news/ – カテゴリー「ニュース」のアーカイブ
  • https://example.com/cooking-time/30min/ – カスタムタクソノミー「調理時間」の「30分」タームのアーカイブ

これらのアーカイブページのデザインは、テーマファイル taxonomy-{taxonomy}-{term}.phptaxonomy-{taxonomy}.phptaxonomy.php などで制御できます。

🔷 「タームとタグの違いは?」

項目タームタグ
定義あらゆるタクソノミーの項目非階層型タクソノミー「post_tag」のこと
範囲カテゴリー、タグ、カスタムタクソノミーなど全てタグタクソノミーの中の項目のみ

つまり「タグ」は「ターム」の一種ということになります。

実際のユースケース:カスタムタクソノミーの活用例💼

🔷 ポートフォリオサイトの場合

カスタム投稿タイプ:「作品」(Portfolio)

カスタムタクソノミー

タクソノミータームの例
制作年「2023年」「2024年」「2025年」
クライアント「企業A」「企業B」
技術「WordPress」「JavaScript」「デザイン」

🔷 ECサイトの場合

カスタム投稿タイプ:「商品」(Product)

カスタムタクソノミー

タクソノミータームの例
ブランド「ブランドA」「ブランドB」
サイズ「S」「M」「L」
「赤」「青」「緑」

🔷 イベントサイトの場合

カスタム投稿タイプ:「イベント」(Event)

カスタムタクソノミー

タクソノミータームの例
開催地「東京」「大阪」「オンライン」
ジャンル「音楽」「ビジネス」「IT」
参加費「無料」「有料」

まとめ:タクソノミーとタームをマスターしよう!🎉

この記事では、WordPressのタクソノミーとタームについて解説してきました:

  • タクソノミーはコンテンツを分類する「方法」や「箱」
  • タームはその分類の中の「項目」や「ラベル」
  • カテゴリーとタグも実はタクソノミーの一種
  • カスタムタクソノミーを使えば、オリジナルの分類方法を作れる
  • プラグインかコードでカスタムタクソノミーを簡単に作成可能

タクソノミーとタームを上手に活用すれば、コンテンツを整理しやすくなり、ユーザーも欲しい情報を見つけやすくなります。サイトの規模が大きくなるほど、適切な分類方法は重要になります!

ぜひあなたのWordPressサイトでも、カスタムタクソノミーを活用してみてください!👍

次回は「カスタムフィールドとカスタムタクソノミーの連携テクニック」について解説する予定です。お楽しみに!


参考リンク

✉️ あなたのリクエスト教えてください!

「この記事わかりやすかった!」
「他にもこんな記事書いてほしい!」
そんな声を、ぜひXのDMで教えてください!😊📩

できるだけリクエストにお応えして、今後の記事作成に活かしていきます

▶️ Xもフォローしてもらえるとめちゃくちゃ嬉しいです!

hisa

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA