2025年08月05日[火曜日]

WordPressで独自の分類軸を作る!タクソノミーで投稿管理を拡張

  • 2025/08/02
  • BASICS
  • WordPressの基礎
  • 0comments
  • 85views
  • 約10分で読めます
  • 34

前回の記事では、WordPressのテンプレート階層を活用してアーカイブページを統合管理する方法を学習しました。

これまでの学習でカテゴリーとタグを使って投稿を分類し、それらを「ターム」と呼ぶことも学びました。しかし、サイトの内容によってはカテゴリーとタグの2つの分類軸だけでは不十分な場合があります。

例えば、企業のお知らせサイトで「内容による分類(新店舗、イベント、休業など)」と「場所による分類(東京店、大阪店など)」の両方で投稿を分類したい場合、カテゴリーとタグだけでは対応が困難です。

今回は、カテゴリーやタグとは別の独自の分類軸「タクソノミー」を作成して、より柔軟な投稿管理を実現します。

今回の目標

  • タクソノミーの概念を理解する
  • タームとタクソノミーの関係を整理する
  • register_taxonomy関数の使い方をマスターする
  • 実際に「店舗」タクソノミーを作成・設定する

タクソノミーとは

タクソノミー(Taxonomy)とは、投稿を分類するための「分類システム」そのものを指します。WordPressには標準で「カテゴリー」と「タグ」という2つのタクソノミーが用意されていますが、独自のタクソノミーを作成することで、さらに多角的な分類が可能になります。

タームとタクソノミーの関係

これまでの学習で、カテゴリーやタグの個々の項目を「ターム」と呼ぶことを学びました。タームとタクソノミーの関係を整理しましょう。

  • タクソノミー:分類システム(カテゴリー、タグ、独自の分類軸)
  • ターム:各タクソノミー内の個別項目
具体例で理解する

カテゴリータクソノミーの場合

  • タクソノミー:「カテゴリー」(分類システム)
  • ターム:「お知らせ」「イベント」「新商品」(個別の分類項目)

タグタクソノミーの場合

  • タクソノミー:「タグ」(分類システム)
  • ターム:「重要」「期間限定」「全店共通」(個別の分類項目)

つまり、タクソノミーは「箱」、タームは「箱の中身」と考えると理解しやすいでしょう。

分類軸の拡張例

レストランチェーンのお知らせサイトを運営している場合を考えてみましょう。

カテゴリー お知らせの種類

  • 新商品
  • イベント
  • メンテナンス
  • キャンペーン

タグ お知らせの特徴

  • 期間限定
  • 全店共通
  • 要予約
  • テイクアウト

独自タクソノミー 対象店舗

  • 渋谷店
  • 新宿店
  • 池袋店
  • 横浜店

このように、カテゴリーやタグとは全く別の切り口で投稿を分類できるのがタクソノミーの特徴です。

タクソノミーの種類

WordPressのタクソノミーには2つの種類があります。

階層構造を持つタクソノミー(カテゴリー型)

  • 親子関係を持つことができる
  • カテゴリーと同じような動作をする

使用例:地域分類

関東
├── 東京都
│   ├── 渋谷区
│   └── 新宿区
└── 神奈川県
    ├── 横浜市
    └── 川崎市

階層構造がないタクソノミー(タグ型)

  • 親子関係を持たない
  • タグと同じような動作をする

使用例:特徴分類

個室あり、禁煙、WiFiあり、駐車場完備、テラス席

どちらのタイプにするかは、タクソノミー作成時の設定で決定します。

タクソノミーの設定方法

独自タクソノミーを作成するには、functions.phpファイルでregister_taxonomy関数を使用します。

基本的な設定

まずは最小限の設定でタクソノミーを作成してみましょう。

add_action('init', function() {
  register_taxonomy(
    'tax-store',    // タクソノミーのスラッグ
    'post',         // 適用先の投稿タイプ
    array(
      'hierarchical' => true,         // カテゴリー型にする(親子関係を許可)
    )
  );
});
PHP

add_actionとinitフックについて

add_action('init', function() {
  // タクソノミー登録処理
});
PHP
  • add_action:WordPressの特定のタイミングで処理を実行するための仕組み
  • init:WordPressが初期化される際に実行されるタイミング
  • function():実行する処理を無名関数として定義

ようするに「WordPressが初期化される際に実行されるタイミングでタクソノミーを管理画面に追加する」と言うことになります。

タクソノミーのスラッグについて

タクソノミーのスラッグは、WordPressシステム内でタクソノミーを識別するための重要な名前です。設定時に注意すべき点があります。

一意性の確保

タクソノミーのスラッグは、WordPress内で必ず一意(唯一)である必要があります。他のタクソノミー、投稿タイプ、ページスラッグと重複してはいけません。

予約語の回避

WordPressには既に使用されている予約語があり、これらは使用できません。

  • category(カテゴリータクソノミー)
  • tag(タグタクソノミー)
  • post(投稿タイプ)
  • page(固定ページタイプ)
  • その他のWordPress内部で使用される名前
プレフィックス(接頭語)の活用

今回は「店舗(store)」のタクソノミーを作成しますが、単純にstoreとするのではなく、tax-というプレフィックスを付けてtax-storeとしました。

この命名には2つのメリットがあります。

  1. タクソノミーであることが明確:コードを見た時に独自タクソノミーだと一目でわかる
  2. 予約語との重複回避:プレフィックスにより既存の名前との衝突を防げる

命名例

// 良い例(プレフィックス付き)
'tax-store'     // 店舗タクソノミー
'tax-region'    // 地域タクソノミー
'tax-level'     // レベルタクソノミー

// 避けるべき例
'store'         // シンプルすぎて重複リスクあり
'category'      // WordPress予約語
'tag'           // WordPress予約語

この設定だけでタクソノミーが作成されます。ただし、管理画面での表示は「カテゴリー」となっています。(カテゴリーが2つ)

実例:店舗タクソノミーの完全設定

実際に使いやすいタクソノミーを作成するために、詳細な設定を行います。

functions.php
add_action('init', function() {
  register_taxonomy(
    'tax-store',    // タクソノミーのスラッグ
    'post',         // 適用先の投稿タイプ
    array(
      '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'         => '店舗',           // 管理メニューでの表示名
      ),
      'hierarchical' => true,         // 階層設定
      'public' => true,               // 公開設定
      'show_in_rest' => true,         // REST API対応
      'show_admin_column' => true,    // 管理画面表示
      'show_in_quick_edit' => true,   // クイック編集対応
      'show_in_nav_menus' => true,    // メニュー表示
      'query_var' => 'store',         // クエリ変数名
      'rewrite' => array(             // パーマリンク設定
        'slug' => 'store',          // URLのスラッグ
        'with_front' => true,       // 投稿の先頭スラッグを付ける
      ),
    )
  );
});
PHP

functions.phpに上記コードを追加後、以下の確認を行ってください。

パラメータの詳細解説

各パラメータの意味と効果を詳しく見ていきましょう。

labels(表示ラベル設定)

管理画面で使用される各種ラベルを日本語化します。これにより、ユーザーフレンドリーな管理画面が実現できます。

このラベルの設定により先程まで「カテゴリー」と表示されていたタクソノミーが「店舗」に変わります。

hierarchical(階層設定)

  • true:カテゴリーのような親子関係を持つ階層構造
  • false:タグのような平坦な構造

public(公開設定)

  • true:Webページでのクエリやアーカイブページが利用可能
  • false:管理画面でのみ利用可能

show_in_rest(REST API対応)

  • true:ブロックエディターで利用可能
  • false:クラシックエディターでのみ利用可能

この設定により投稿の編集画面に「店舗」タクソノミーのが表示されます。

show_admin_column(管理画面表示)

  • true:投稿一覧画面に店舗列が表示される
  • false:投稿一覧画面には表示されない

この設定により投稿一覧画面に「店舗」が表示されます。

show_in_quick_edit(クイック編集対応)

  • true:投稿一覧からのクイック編集で店舗を変更可能
  • false:個別編集画面でのみ変更可能

この設定により投稿一覧画面のクイック編集時に「店舗」が表示されます。

show_in_nav_menus(メニュー表示)

  • true:外観 → メニューで店舗タクソノミーが選択可能
  • false:メニューでは選択不可

query_var(クエリ変数名)

URLクエリで使用される変数名を指定します。例:?store=shibuya

rewrite(パーマリンク設定)

  • slug:URLで使用されるスラッグ名
  • with_front:投稿のパーマリンク構造の先頭部分を含めるかどうか
パーマリンク構造の理解

現在のサイトのパーマリンク構造は以下のようになっています。

  • 個別記事:/news/%year%/%monthnum%/%day%/%post_id%
  • カテゴリーベース:/news/category
  • タグベース:/news/tag

そして店舗タクソノミーも同様の構造にしたいです。

  • 店舗タクソノミーベース:/news/store
rewrite設定の実例

今回の設定では以下のようになります。

'rewrite' => array(
  'slug' => 'store',          // URLのスラッグ
  'with_front' => true,       // 投稿の先頭スラッグを付ける
),
PHP

この設定により、店舗タクソノミーのアーカイブページは以下のURLでアクセスできます。

http://sample.local/news/store/渋谷店
http://sample.local/news/store/新宿店
http://sample.local/news/store/池袋店

with_frontパラメータの詳細

  • true/news/store/店舗名 (投稿パーマリンク設定の先頭部分/news/を含める)
  • false/store/店舗名 (投稿パーマリンク設定の先頭部分を含めない)

サイト全体の一貫性を保つため、通常はtrueに設定します。

動作確認

管理画面での確認

投稿メニューの確認
  • 管理画面左メニューの「投稿」配下に「店舗」が追加されている
投稿編集画面の確認
  • 投稿編集画面のサイドバーに「店舗」セクションが表示
  • カテゴリーと同様にチェックボックスで選択可能
投稿一覧画面の確認
  • 投稿一覧に「店舗」列が追加表示

テストデータの作成

実際にタクソノミーを使用するため、テストデータを作成しましょう。

  1. 店舗タームの追加
  1. 管理画面店舗新規追加
  2. 以下の店舗を作成
    • 全店
    • 渋谷店
    • 新宿店
    • 池袋店
  1. 投稿への店舗設定
  • 既存の投稿を編集
  • 店舗セクションで適切な店舗を選択
  • 更新ボタンをクリック

まとめ

今回の記事では、WordPressで独自のタクソノミーを作成する方法を学習しました。

重要なポイント

  • タクソノミー:カテゴリー・タグとは別の独自分類軸を作成する仕組み
  • register_taxonomyfunctions.phpでタクソノミーを登録する関数
  • スラッグの命名tax-などの接頭辞を付けて重複を回避
  • show_in_rest:ブロックエディターで使用するために必須の設定

機能比較表

項目カテゴリータグタクソノミー
階層構造ありなしhierarchicalで切り替え
作成方法標準機能標準機能register_taxonomyで追加
スラッグcategorytag任意
用途主分類補助分類任意の分類軸

次回予告

今回はタクソノミーの作成と設定方法を学習しました。

次回は、作成したタクソノミーをWebページで表示する方法を学習します。具体的には

  • タクソノミーアーカイブページの作成
  • 投稿詳細ページでのタクソノミー表示
  • タクソノミーを使った絞り込み機能の実装

タクソノミーの真価は、作成後にいかに効果的に表示・活用するかにあります。次回の実装方法をお楽しみに!

成果物

この記事で作成した成果物は、以下のページでまとめて確認することができます。

成果物をまとめて確認する

この記事の評価をお願いします

評価をすると「既読」となり、まだ読んでいない記事を区別できます。

この投稿をシェアする

コメントを残す

CAPTCHA



WordPressアーカイブページの統合管理!archive.phpで効率的なテンプレート設計

WordPressアーカイブページの統合管理!archive.phpで効率的なテンプレート設計  BASICS

WordPressのテンプレート階層を活用して、カテゴリー、タグ、日付のアーカイブページを一つのファイルで統合管理する方法を解説します。重複するコードを整理し、保守性の高い効率的なテンプレート設計を実現するテクニックを学習できます。

  • 2025/07/31
  • 0comments
  • 101views

WordPressで独自の分類軸を作る!タクソノミーの一覧表示とデータ抽出

WordPressで独自の分類軸を作る!タクソノミーの一覧表示とデータ抽出  BASICS

WordPressで作成した独自タクソノミーを実際にWebページで表示・活用する方法を詳しく解説します。既存知識を活用して効率的に学習できます。お知らせページでの一覧表示、店舗別投稿ページの作成、複数タクソノミー運用時のテンプレート設計まで、実践的な実装方法を段階的に習得できる内容です。

  • 2025/08/02
  • 0comments
  • 61views

STAY CONNECTED

wp-ch Admin

現役のフリーランスエンジニアがWordPressによるWebサイト構築を基礎から実践テクニックまで徹底解説します。

たくさんの方がフォローしてくれています。あなたもぜひ、情報を受け取ってください。

STORY|ストーリー

WordPressを効率よく確実に学ぶためには、学習の順序が大切です。知識が自然に積み上がるよう、学習ステップに沿って記事を順番に並べています。

学習ストーリー第37話まで掲載中

全ストーリーを見る