2019.06.10
【WP】混乱しがちなカテゴリー、タグ、タクソノミー、タームの意味と違い
WordPressでのサイト構築するうえで、躓きやすいポイントの一つに「カテゴリー」や「タグ」の扱いがあります。
「カテゴリー」や「タグ」をそのまま使用している限りはさほど問題にはなりませんが、オリジナルのタグ/カテゴリーである「カスタムタクソノミー」を使いだすと、これらの違いは何なのか混乱したり、その混乱が原因で出力に手こずったりしがちです。
本記事ではこれらの概念の違いや共通点を分かりやすく紹介します。
「カテゴリー」も「タグ」も「タクソノミー」である。
まず大前提として、「カテゴリー」も「タグ」も「タクソノミー」の仲間です。とりあえず表にまとめてみたのでご覧ください。
タクソノミー | 階層あり | デフォルトであり | カテゴリー |
---|---|---|---|
自分で作成 | カスタムタクソノミー(階層あり) | ||
階層なし | デフォルトであり | タグ | |
自分で作成 | カスタムタクソノミー(階層なし) |
カテゴリーやタグのように、記事を分類するためにつけるものはすべて「タクソノミー」です。つまり「get_category()」や「get_tag()」などの関数の代わりに「get_taxonomy()」を使うこともできるということです(微妙に動きや引数が異なるので厳密に同じではありません)。
「カテゴリー」と「タグ」は、それぞれ「カテゴリー」、「タグ」という名前が付けられた「タクソノミー」ということです。この二つはWordPressにデフォルトで組み込まれているため、「タクソノミー」よりも耳慣れている人がほとんどでしょうが、概念としては「タクソノミー」の方が包括的なものになります。
「タクソノミー(taxonomy)」の意味からして「分類」ですから、記事を分類するためのものはなんでも「タクソノミー」ということです。
そして「カスタムタクソノミー」とは、自分で設定して作成したタクソノミーのことです。WordPressをインストールしただけでは、「カテゴリー」と「タグ」しかありません。functions.phpに記述したり、「Custom Post Type UI」などのプラグインを使用して追加する必要があります。この追加されたタクソノミーのことを「カスタムタクソノミー」と呼ぶのです(「カスタム分類」と表記される場合もあります)。
「ターム」とは
詳細な話を進める前に「ターム」の概念を説明します。これを把握していないと「カテゴリー/タグ/タクソノミー」の理解がめちゃくちゃになり確実に混乱するのでしっかり理解しましょう。
グルメブログがあるとします。このブログの記事には、以下のようなカテゴリ、タグ、タクソノミーが付与されています。
「ターム」とは以下の通りです。
「タクソノミー」おける一つ一つの項目のことです。
「カテゴリー/タグ/タクソノミー」関連で最も混乱するのが、この「ターム」を指して「カテゴリー」や「タグ」という言ってしまうことです。
記事にカテゴリーを付ける
などと言いますよね。記事投稿時にはそれで通じますが、サイト構築時にその表現を使ってしまうと危険です。例えば、
記事についているタクソノミーを出力する
なんとなく意味が通じますが、間違っています。この場合「get_taxonomy()」を使用しても期待する挙動になりません。このとき必要なのは記事についている「ターム」なので、「get_term()」である必要があるのです。他にも記事一覧をタクソノミーで絞り込んで出力する際、出力の関数に引数としてターム名を設定しなければならないところをタクソノミー名を記入してしまい、思い通りの結果にならない…といったトラブルのもとになってしまいます。
このタクソノミーとタームの混同は非常に厄介です。「3つのカテゴリー」と言うときに、3つのタクソノミーなのか3つのタームなのか不明瞭です。構築の際には出来るだけ「タクソノミー」「ターム」の呼称を正確に使いましょう。
呼称を整理すると以下のような感じです。
「カテゴリー」と「タグ」の違いは階層の有無
では「カテゴリー」と「タグ」の違いは何でしょうか。解説のため一旦「カテゴリー」と「タグ」を忘れて、「タクソノミー」で説明をします。
「タクソノミー」の設定には「hierarchical」というパラメータがあります。「hierarchical」すなわち「階層」です。この「階層」が「true」の場合、タームに階層構造、つまり親子関係を持たせることができます。「階層」が「false」の場合、タームは階層のないフラットなものになります。
地域の情報を付与するタクソノミーがあったとします。地域とは入れ子の構造になっており、目黒区のお店は同時に東京都のお店であり、関東のお店でもあります。これが階層構造です。
タクソノミーに階層構造がある場合のメリットとしては、記事に子タームがついていると親のタームを取得することができます。上記の例で言えば、ある記事に「目黒区」タームがついてるときに、記事内に「関東のお店」という表示を出したり、「関東 > 東京 > 目黒区のお店」というようなパンくずリストを作ることが可能になります。
また、タームをグルーピングすることができ、「東京のタームがついている記事一覧」として「目黒区、台東区、府中市」のタームがついている記事の一覧を出力することもできます。
もしタームにそのような階層構造が無く、フラットな場合は階層構造を使用する必要はないでしょう。
さて、本題の「カテゴリー」と「タグ」の違いですが、「カテゴリー」には階層構造があり、「タグ」にはありません。WordPressにデフォルトで用意されているタクソノミーのうち、階層構造があるものが「カテゴリー」、階層構造がないものは「タグ」という名前が付けられているのです。
構築時には「カテゴリー」、「タグ」、「タクソノミー」どれを使うべきか
実は「カテゴリー」や「タグ」は、ただ単にデフォルトで用意されているというだけではありません。デフォルトで用意されているがために、「get_category()」や「get_tag()」などの固有の関数があったり、パーマリンク設定のルールがカスタムタクソノミーと若干異なっています。少し便利なのです。
そのためサイトに必要なタクソノミーが1、2種類なのであれば、デフォルトで用意されている「カテゴリー」や「タグ」をそのまま使用するのがおすすめです。そこからさらに、別途タクソノミーが必要な場合は、カスタムタクソノミーを追加して使用するのが良いでしょう。
ただ、タクソノミーを4種類も5種類も使用する必要がある場合には、「カテゴリー/タグ」を使用せず、すべてカスタムタクソノミーを使用することが多いです。5つのタクソノミーのうち1つだけ挙動がことなると実装がめんどくさくなる場合がままあるからです。
タクソノミーの成り立ちとWordPressの仕様
「カテゴリー/タグ/タクソノミー」が分かりにくいのはタクソノミーの成り立ちに原因があります。
そもそもWordPressには分類機能としてカテゴリーとタグしかありませんでした。2つしかないので階層の有無という説明は表面に出ず、「カテゴリー」「タグ」という固有の呼称が使われていたのでしょう。
WordPress2.3以降、カスタムタクソノミー機能が実装されたわけですが、その際にコア機能として「カテゴリー」「タグ」は残され、かつ一般名詞として浸透していますから呼称も「タクソノミー」などに変更しなかったのだと思います。
こうして、現在WordPressの分類機能には、同じ機能なのに複数の呼称や関数があるという状況になっているのです。ただ多くのユーザーはカスタムタクソノミーを使用することなくデフォルトの「カテゴリー」「タグ」だけで済むわけなので、さほど大きな問題ではないのでしょう。
ただカテゴリーのタームまでも「カテゴリー」と呼ぶ習慣だけは何とか変わらないものかと思います。タクソノミーやタームと言う言葉がもっと一般に浸透してほしいものです。