【WordPress】カスタムタクソノミーとは

最終更新日: 公開日: 2022年02月

カスタマイズされた WordPress を改良する際に苦労する原因の一つにカスタムタクソノミーがある.
本当に使うべきところにだけ使っていないのが良くない.
カスタム投稿タイプを作ったからと言って必ずカスタムタクソノミーが必要になるわけではない.

タクソノミー

言葉を聞いても何のことか分からないのも難しくしている要因と思うので,ここで言葉を整理してみる.

タクソノミーとは

taxonomy を辞書で見ると「分類法」「分類学」「分類」などとある.

だとすると「カテゴリ」と「何が違うのか?」となって余計混乱する.

WordPress におけるタグとカテゴリの違いは以前,言及しているのでリンクを押して一読をお勧めするが,要はこれを包括したようなものが WordPress でいうところの「カスタムタクソノミー」となる.

タグでもあり,カテゴリーでもあるのだ.
まず,これを覚えておく.

カスタムタクソノミーとは

つまり,カスタムタクソノミーとは「カスタム投稿タイプ」にカテゴリーやタグを追加するためのものと考えればよい.

タームとは

タームという言葉も混乱する要因だ.

get_terms という関数がある.
同様に
get_tagsget_categories という関数がある.

これも混乱する原因だと思うのだが,使い方をみているとほぼ一緒に見える.

実際,ほぼ一緒なので始末が悪い.

WordPress において,
タグ,カテゴリーを包括するものがタクソノミー
である.
タグ,カテゴリー,タクソノミーの実際についている名前をターム
という.
だから,タームとはタグ・カテゴリー・タクソノミーのどれにも使えるものなのだ.

なのに,get_tags や get_categories があって,get_terms があるので,混乱する.

本来,get_tagterms や get_categoryterms というべきもの(?)なのである.
要は get_terms が汎用的なものであり,それの特別なものが get_tags や get_categories となる.

この辺りのことは
WordPressでカテゴリー・タグ・タクソノミーのタームを全取得して一覧表示する方法【WP_Term_Query / get_terms()】
が詳しい.

さらにちょうど図解していて分かりやすいページをみつけた.
【WP】混乱しがちなカテゴリー、タグ、タクソノミー、タームの意味と違い

どちらも参考にすると良いと思う.

カスタムタクソノミーを使う場面

前に WordPress を薦める記事を書いたが,その際に「カスタムタクソノミー」は使うなとしている.

しかし,使う必要のないものなら,なぜ存在するのかという疑問がわく.
カスタム投稿タイプを使ったからと言ってカスタムタクソノミーを使わないといけないということはない.

しかし実際,使うしかない場面もある.

それが「カスタム投稿タイプ」を利用してサイトを作った際に「タグ」「カテゴリー」を一般の投稿記事と同じタグ・カテゴリーを使うことが出来ない場合である.

具体的にいうと言語を分ける場合などである.

日本語・英語など多言語に対応したサイトを作る場合

サイトをつくっていて,日本語だけでなく英語のページも作る場合,まず思いつくのが「カスタム投稿タイプ」で英語ページを作ること.
その際,タグページやカテゴリページが必要になってくるが,そのタグやカテゴリを日本語と混ぜるのは明らかにおかしい.
そこで,英語のタグページや英語のカテゴリページが必要になってくる.

その場合にどのように作るべきかについて例を書いてみる.

カスタム投稿タイプ

まず,en というスラッグを持つ「英語」というカスタム投稿タイプを作る.
supports とか他の項目は register_post_type を見て適当に設定する.

register_post_type( 'en', // カスタム投稿タイプ名前
  array(
    'labels' => array(
      'name' => __( '英語' ), // 表示する名前
      'singular_name' => __( '英語' )
    ),
    'public' => true,
    'has_archive' => true,
    'rewrite' => array('slug' => 'en', 'with_front' => false),
    'menu_position' => 5, // 適当に表示場所を決める
    'supports' => array(
      'title',
      'editor',
      'thumbnail',
      'excerpt',
      'author'
    )
  )
);

これを init に add_action しておく.

カスタムタクソノミー

entag というスラッグを持つ「タグ(英語)」というカスタムタクソノミーを作る.
これがタグの英語版となる.
register_taxonomy を見て引数は決める.

register_taxonomy(
  'entag', // カスタムタクソノミー名前
  array('en'), // カスタム投稿タイプ名前 (array なら複数入れることができる)
  array(
    'hierarchical' => false, // タグなので階層をもたない
    'update_count_callback' => '_update_post_term_count',
    'label' => 'タグ(英語)',
    'public' => true,
    'show_ui' => true
  )
);

これも init に add_action しておく.

タグページ

通常なら,tag.php に書けばタグをクリックした時のタグアーカイブページが表示される.
カスタムタクソノミーを作った場合,どうなるかというと,

taxonomy-(カスタムタクソノミー名).php

となる.この例の場合

taxonomy-entag.php

である.
このファイルの大元は archive.php である.そのファイルから作れる.

各ページの中のタグ表示部分

各ページの中でそのページで登録されているタグを表示するには通常は single.php に the_tags() を使えばよいが,カスタム投稿タイプでカスタムタクソノミーを使う場合は
single-(カスタム投稿タイプ名).php に the_terms() を使う.

今回の例の場合は single-en.php

the_terms( get_the_ID(), 'en', 'Tags: ', ', ' );

となる.これで

Tags: xxxxxxxxx, yyyyyyyyy

のようなタグが表示される.

 

Contact

ご質問等ありましたら,お手数ですが弊社の個人情報保護方針をお読み頂いた上でフォームからお願い致します.

 
   
contact
Pagetop