WordPressには便利な2つのカスタム機能があります。 カスタム投稿タイプと、カスタムタクソノミー(分類)です。 一緒に使うことも多く、同時に紹介されることが多いのですが、この2つ、機能としては全く別物です。
カスタム投稿タイプは、記事を「投稿」する時に使うもの。つまり投稿機能を拡張(カスタム)するもの。 一方、カスタムタクソノミー(分類)は、記事を分類する時に使うもの。つまりカテゴリやタグ機能を拡張するものです。タクソノミーとは「分類」という意味の英語です。
残念ながら後者のカスタムタクソノミーについてはあまり情報が多くありません。 そこで、今回の記事ではこのカスタムタクソノミー機能を深掘りしたいと思います。
【目次】
※QA Heatmap Analyticsは弊社で作った無料で簡単につかえるのに高機能な行動分析ツールです
一言でいえば、カテゴリとタグだけしか使えないと、ごちゃごちゃする情報をカスタムタクソノミーを使えばビシッと整理できるからです。
たとえば、ゴルフのノウハウを発信するサイトを運用しているとします。 最初はカテゴリとして「コラム」とか「特集」なんてカテゴリを作ります。こんな感じ。
【タイトル】ゴルフのボールはなぜ飛ぶのか?
【カテゴリ】
- ゴルフコラム
ところが、しばらく運用していると以下のようになってきます。
【タイトル】接待ゴルフは嫌だー!最初のドライバーショットは手を抜くべき?
【カテゴリ】
- レッスン
- ゴルフコラム
- 初心者
- ゴルフクラブ→ドライバー
【タグ】
- マナー
- 接待
- 初心者
- …
だんだんと、タグを使うべきかカテゴリを使うべきか混乱してきますし、分類も増えます。 このように長年ブログを運用していくと、「なんかうまくカテゴリを整理できていないな」「タグが多くて選びづらいな」と思ったことがあるはずです。
まさにこのような問題に対処するために、カスタムタクソノミーが存在します。
カスタムタクソノミーは、前出したように、情報の分類を自由に作っていける機能です。 分類をカスタムできるから、カスタム分類(タクソノミー)と言われます。
階層化(hierarchical)してカテゴリのようにも使えますし、階層化せずタグのような分類も作ることができます。
※カテゴリとタグの違いがわからない人はこちらもご覧ください。
たとえば先ほどの例で考えます。
【カテゴリ】
上記では、どれがメインカテゴリか分かりづらい上に、サブカテゴリも増えたら記事の投稿画面もごちゃごちゃしますよね。
ところがカスタム分類で作ると、投稿画面で選ぶのがとてもわかりやすく選べるようになります。 先に画面を見て頂いた方が早いので、お見せします。
普通は「Categories」しか表示されていないですが、その下に「道具」「性別」などの分類が表示され、それぞれ選べるようになっています。
カスタム分類を使うと、このような分類を無限に作っていけるのです。 だいぶ情報が整理されて、投稿がやさしくなると思いませんか?
上記で見て頂いた投稿画面がやさしくなる以外にも、カスタムタクソノミーには様々なメリットがあります。
一言でいうと「情報をきれいに分類し、個別に細かくプログラムで管理できる」ことが主なメリットです。
一方、もちろんデメリットもあります。
デメリットは、メリットの裏返しで、「個別管理する手間とプログラム量が増える」ということです。
結論からいうと下記の判断基準がよいと思います。
カテゴリでも工夫すればいろいろ対応はできますので、基本はカテゴリを使います。 タグは階層化ができない上に、増えてくるとカオスになるので、なるべく増やさず「カテゴリを横断する必要がある場合」にうまく使うようにします。
ただサブカテゴリも含めてカテゴリが100以上できそうな場合は、やはりカスタム分類があった方が綺麗にまとまりますので、その場合はシステムに強い人と一緒に作る方がいいかも知れません。
カテゴリはユーザーが読みたくなるような記事の分類に使います。近いイメージでいうと「サイドメニューに出したいメニュー(サブカテゴリも含む)」です。例えばゴルフで言うと「レッスン」や「マナー」、「ゴルフ場レビュー」といった分類が該当します。
上記のようにカテゴリを使うと、以下のメリットを享受できます。
多くのウェブサイトは「記事を読んでもらう」ことが主目的ですので、カテゴリはユーザー目線(マーケティング目的)で作るというのがポイントです。
そこまでで基礎を構築した上でカスタム分類を追加すれば、将来の拡張にも柔軟に対応できます。
つまりスモールスタートをする人には特に向いている考え方です。余談ですが、私はこの考え方が一番好きです。
一方デメリットとして、プログラムを組むときには「この時はカテゴリ系の関数」「この時はカスタム分類の関数」と意識的に切り替えねばならず、統一したコードにならないので、プログラマが混乱しやすいというのがあります。
すべてカスタム分類で作ると、同じルールと同じカスタム分類系の関数を適用できるので、プログラムに統一感が出るのが一番のメリットです。
デメリットとしては、最初の構築に手間がかかるのと、%category%をパーマリンクで使えなくなること。また投稿の画面もカテゴリを使用しなくなるので、一般の人にはわかりづらい投稿画面になります。
つまり標準と違うことをするので、その分、運用で考えなければいけないことと、使えないプラグインが増えたり、ユーザー教育の手間が増えます。
標準で用意されているカテゴリーやタグと、カスタム分類の主な違いは下記になります。
カテゴリ | タグ | カスタム分類 | |
よく使われるカテゴリ系の関数が使えるか | ○ | ○ | × |
ネット上の情報の多さ | ○ | △ | × |
適用されるテンプレート | category.php | tag.php | taxonomy.php |
パーマリンク設定のカスタマイズ | %category%で対応 | ※通常使わない | 標準では非対応 |
対応しているプラグイン | 多い | 多い | 少ない |
上記の違いを考慮すると、なるべくカテゴリやタグを基本路線として使った方が、ネット上の情報も多くサイト構築が容易なため、上述の判断になっています。
カスタムタクソノミーでは、下記の順番でテンプレートがあたります。 {taxonomy}は分類名のslugで、{term}はターム名のslugです。 例えば性別(sex)というカスタム分類を作った場合は、{taxonomy}がsexで、{term}はwomanになります。
▼参考
タクソノミーテンプレート -WordPressCodex日本語版
カスタムタクソノミーのアーカイブ(記事一覧)を出力するURLは、基本的に下記のルールで適用されます。
example.com/{taxonomy}/{term}/
注意点としては、階層化されていたとしてもそれは反映されません。
× example.com/area/tokyo/shibuya/
◯ example.com/area/shibuya/
記事自体のURLは、カスタムタクソノミーに属していてもいなくても関係なく、WordPress標準のパーマリンクの設定が有効になります。
それら標準のパーマリンクを変更したい場合は大抵プラグインが出ていますが、私は基本的にプラグインはなるべく使わない方がよいと思っています。 なぜなら、脆弱性のもとになったり、WordPressのバージョンアップで動かなくなったり、動きが重くなったりするからです。
そこで、そもそもパーマリンクを変えるべきなのか?ということを下記項で考えてみます。
カスタム分類は、前出の通りパーマリンク設定の対象外です。問題はカテゴリです。
カテゴリを作る場合、パーマリンクに/%category%/%post%/とカテゴリを入れるべきかどうかは、悩む人も多いと思います。 なぜ悩むかというと、まずパーマリンク(URL)のディレクトリがSEOに効くと言われているからですね。
しかしそれは昔の話。たしかに200以上あるといわれているSEOファクターの一つでありますが、その効果はほとんどありません。そんなことより今のGoogleに対しては、ユーザーの好む内容の濃いページを作る方がはるかに効果的です。
WordPressの標準機能では、複数カテゴリを指定した場合、記事のパーマリンクで使われている%category%には、「一番初期にできたカテゴリ(IDが若いカテゴリ)」が選択されます。標準ではカスタマイズ不可です。
どうしてもカスタマイズしたい場合、function.phpでやろうとするとかなり複雑になるので(※)、プラグインを使うのがオススメですが、たくさんのプラグインをいれると問題が発生します。
一番のオススメは、後述しますがYoast SEOプラグインを使うことです。
※ WordPressのパーマリンク処理は、基本的にDBのwp_optionsテーブルに入っている値をみながら行われます。それらを書き換えるには仕組みを理解しなくてはなりません。
▼WordPress の表示ロジックを理解する
www.prime-strategy.co.jp/2499/
▼wordpressで謎の転送処理されているのを突き止める
aulta.co.jp/2017/08/15/3805.html
▼WordPressに独自リライトルールと独自URLパラメータの追加(wprewrite/wp_query) rensrv.com/wp/apps-and-sitemap/prepare-app/add-rewrite-rules/
SEO以外のパーマリンクのメリットを考えると、ユーザーにとってわかりやすいという利点はあります。 例えば、下記の例では、ディレクトリ構造をみれば「タワーレコード渋谷店」がどこにあるか、よりわかりやすくなります。
例)
○ http://example.com/area/tokyo/shibuya/towerrecord-shibuya
△ http://example.com/shibuya/towerrecord-shibuya
しかし、今どきのスマホで見るユーザーはURLを見ないので、あまり意味をなさないです。かつ上記のような階層化されたURLにこだわるためには、プラグインなども入れなければいけなく、それでサイトの表示速度が遅くなったらトータルではマイナスかも知れません。
総じてユーザビリティのためだけにディレクトリ構成にこだわる必要性は低いです。
GoogleはURLのディレクトリ構成よりも、パンくずのリンク構造の方を重視します。つまり、ディレクトリは割とどうでもよく、それよりパンくずをしっかり考えた方がメリットがあるのですね。
ですからYoast SEOなどのプラグインは、複数カテゴリを選んだ場合に、メインカテゴリを選べるようになっており、パンくずもうまく制御できるようになっています。
上記を踏まえ、私は、下記の判断で良いと思っています。
記事のパーマリンクは標準の%postname%がよいと思います。カテゴリを含める必要はありません。
一方で、やはり含めたいという判断をされる場合。
SEOだけのために多くのプラグインを入れると脆弱性のもとになるので、あまりオススメできません。メジャーであるYoast SEOプラグインさえ入れれば、カテゴリを意識したパーマリンクとパンくずを設定してくれますので(パンくずはYoastSEOの関数を使う必要があります)安心です。
なお、Yoast SEOプラグインは、上記にかかわらず、様々なSEO補助機能があるので自分でプログラムをガリガリ書くのがメンドクサイ人にはお勧めです。
まず、関数をご紹介する前に、そもそも、データ上は、カテゴリもタグもカスタムタ分類(クソノミー)もほぼ一緒の扱い、つまり同じwp_term関連のTableに保存されています。 従って、カスタムタクソノミーは、それらTableのデータを扱う、よりWPのネイティブに近い関数を使って制御します。
関数はタクソノミー(taxonomy)に関するものと、ターム(term)に関する2種類にわかれます。
例えば、「女子向けゴルフおすすめファッション!」という記事があり、それが「性別」というタクソノミー(分類)の「女性」というタームに所属しているとして説明します。
タクソノミー(分類)に関する関数は少な目です。その理由は、そもそも利用機会が少ないからだと思われます。
例えば上記の記事中で「性別」という言葉を使う機会など、めったにないですよね。だいたいタクソノミー名が必要な場合とは、サイドメニューに表示するか、何かバックグラウンドで処理をする時に必要かぐらいです。
以下に代表的な関数をリストアップします。
▼投稿オブジェクトからタクソノミーオブジェクトを取得
get_object_taxonomies( $object, $output );
▼検索条件を指定してタクソノミーオブジェクトを取得
get_taxonomies( $args, $output, $operator )
おわかりのように、タクソノミーに関する関数は、get_object_taxonomiesなどのようにtaxonomyという言葉が入っています。他にもいくつかありますので、詳しくは上記リンクを押してみてください。
タクソノミーと違い、タームに関する関数は結構多いです。その理由は「女性」というタームに所属している記事一覧を表示したかったり、記事が所属しているタームを表示したいというニーズが結構多いからだと思われます。
以下に代表的な関数をリストアップします。
▼idからtermオブジェクトを取得
get_term( $term, $taxonomy, $output, $filter )
▼slug名からtermオブジェクトを取得
get_term_by( $field, $value, $taxonomy, $output, $filter )
▼ある任意の投稿に含まれるtermオブジェクトを取得
get_the_terms( $id, $taxonomy)
その他にもいろいろあります。詳しくは上記のリンク先をご覧ください。
カテゴリなどでもそうですが、タクソノミーでも「タクソノミーテンプレート(taxonomy.php)で使えるもの」と「投稿(single.php)で使えるもの」の二種類にわかれます。
投稿(single.php)だと投稿IDが確定しているので、その投稿が属するタクソノミーをシンプルに取得できるような関数が用意されています。こちらもどこかで分類して提示したいと思います。
カスタムタクソノミーを作りたい場合、function.phpに細かい定義を直接書き込むこともできます。 しかし定義項目が意外と多いですし、URLなども制御したい場合はいちいち調べながら進めなければいけないため、設定しやすいプラグインを使ってしまうのも手です。
メジャーで私も使っているのはCustom Post Type UIです。これを使っていて困ったことはないです。 使い方はインターネットで検索するとたくさん出てきますし、ヘルプも充実してるのでここでは割愛します。
最新のおすすめプラグインはこちら
→Web運用本の著者にも聞いた!WordPressサイトで絶対導入すべきおすすめプラグイン3選と注意するポイント【2021年版】
この記事では、カスタム分類(タクソノミー)について、情報をまとめました。
カスタム分類を使える(WordPressの関数がわかる)人であれば、結論として、
カテゴリはマーケティング目線の分類で使って、他はカスタムタクソノミーで作る。そしてYoastSEOプラグインを入れる
ということがオススメです。
カスタムタクソノミーを使うと、できる幅が拡がるので、ぜひチャレンジしてみてください。
付録的な情報ですが、カテゴリとタグの違いがわからない人は、カスタムタクソノミーを使う前に基本をおさえておきましょう。
実は、カテゴリとタグは、記事を分類するという意味では、一緒の機能です。でも2つ存在しています。なぜでしょうか?
両方使ってみると感覚的にわかると思いますが、タグは、分類するだけ。一方でカテゴリは「サブカテゴリ」を作ることができます。つまり階層化できるのです。
階層化の例は、百科事典を思い出してみるとわかりやすいでしょう。哺乳類→ネコ科→ライオンのように階層化して整理してあげるとわかりやすくなります。 一方で、タグは階層化できない分類に適しています。先ほどの例でいえば「ひげ」とか「かわいい」といったタグが考えられます。
実際に投稿画面でも、カテゴリ設定画面は階層化がわかりやすく表示されます。一方でタグは多くの中から選ぶような画面になっています。
このように分類する手法は「階層化するか否か」で2つにわかれます。
なお階層化のことを英語でhierarchicalと言います。カスタム分類の設定では、分類を階層化するか否かを選ぶことができますが、その時によくこの「hierarchical」という言葉が出てきますので、覚えておきましょう。