WordPressのカテゴリを自由に扱う方法

最近WordPress利用する人が名古屋で増えてるっぽいので、ITの初心者でなくWordPressの初心者に向けてカテゴリーが上手に扱えるように記事を書いていこうと思います。自分は良くカテゴリーの取得でハマった覚えがあります。なので初心者の躓きやすいところにカテゴリーがあるんではないかと考えました。
  1. WordPressのカテゴリーってなに
  2. WordPressのカテゴリーの取得方法
  3. タクソノミーについて
  4. 動的にカテゴリを取得する方法
  5. get_the_cateogryの戻り値

WordPressのカテゴリーってなに

WordPressのカテゴリーとは投稿をグループ化する機能になります。同等の機能にタグという機能がありますが、これも投稿をグループ化する機能になりますが、違いは、狙って記事をグループ化するか、思いつきで作成したタグが気が付いたらグループになるかの違いがあります。タグを沢山設定しておけば、ユーザーはキーワードを考えることなく目的の記事にたどり着きやすくなるというメリットがあります。

WordPressのカテゴリーの取得方法

カテゴリーを取得する方法は、大きく分けて2種類の方法があります。1つは、投稿IDを入力することで、その投稿に紐づいているカテゴリーを全て取得する方法と、タクソノミー名を取得することで、属するタクソノミーを全て取得する方法の2種類があります。

タクソノミーについて

タクソノミーを一言で説明すると、カテゴリーの上位概念です。誕生の経緯は、WordPressはかつてCMSというよりブログとして開発されていたツールでした。開発当初はカテゴリーという概念のみで運用できたのが、カテゴリーという概念を違う名称で、目的にあった利用方法で、利用したいという要望がでてきたのではないでしょうか。WoprdPressの2.3で利用可能になりました。タクソノミーは入れ物の名前で、タクソノミーの中の値はタームっていいます。(カテゴリん中のOSとかカテゴリん中のPHPとか)

動的にカテゴリを取得する方法(投稿IDをキーにして都度カテゴリを取得)

これはget_the_categoryという関数を利用して、投稿IDをパラメータに設定すれば取得することができます。また、ループの中で利用すれば、出力されている投稿、カスタム投稿毎のカテゴリを取得することができますよ。

get_the_cateogryの戻り値

返ってくる値は下記にまとめました。
メンバ変数の項目 メンバ変数項目の論理名
term_id 整数 カテゴリーID
name 文字列 名前
slug 文字列 カテゴリに設定したファイル名(https://example.com/cat)
term_group 整数 類似のタームをグループ化する為のもの
term_taxonomy_id 整数 投稿IDに紐づいたタクソノミーテーブルを参照するキー
description 文字列 タクソノミーテーブルレコードのコメント
parent 整数 親カテゴリのID
count 整数 カテゴリーが持っている記事数
filter 文字列 検索条件名
cat_ID 文字列 term_idと同じ
category_count 整数 countと同じ
category_description 文字列 descriptionと同じ
cat_name 文字列 nameと同じ
category_nicename 文字列 slugと同じ/td>
category_parent 整数 parentと同じ/td>

静的にカテゴリを取得する方法(カテゴリ名をからカテゴリを全て取得する)

さっきは、投稿IDをキーにするか、ループ中にget_the_categoryを使えばデータが取得できるということについて書きました。ただ、これだけでやろうとすると、カテゴリー全部を取得して、一覧を作りたい(サイドバーとかに良くある奴)をやろうとしたときにロジックが必要になります。考えるのめんどいので、ある物を使いたいとなったら、get_termsを利用します。

get_termsの利用方法

パラメータが複数あるので、利用方法を示します。
パラメータ名 必要な理由
タクソノミー名 文字列 どのタクソノミーグループを取得するのか決める為に必要
検索条件 配列or文字列 取得したデータの絞り込みを行う配列のが分かりやすいけど、クエリストリングでもイケる

設定できる検索条件

設定できる検索条件が盛りだくさん?なので検索条件も記載します。
検索条件 受け取れる条件 絞り込めること
order by id,count,name,slug,term_group,none 並び替えの基準になるフィールドを設定する。なんもしないとnameが基準になる。
order DESC,ASC 昇順か降順かを設定する。(ディセンディングとアセンディングって読むよ!)
hide_empty 真偽値 記事のないタームを検索条件に入れるかいれないか。
exclude 配列(ブラックリスト) 指定したタームを除外できるよ!文字列でも配列でも良いよ。
exclude_tree 配列(ブラックリスト) 指定したタームの子供ごと除外できるよ!文字列でも指定できるよ
include 配列(ホワイトリスト) 指定したターム以外を除外する。ちょっと疲れてきたよ!
number 整数(ターム数) 取得するターム数の上限を決める(limit)
fields 文字列(抽出条件) 取得項目を絞ることができる。idsはIDのみ、namesは名前のみ、countは見つかったタームの総数
slug 文字列(スラッグ名) 指定したスラッグ名のタームを取得する
parent 整数(タームID) 指定したタームIDの子タームを取得する
hierarchical 真偽値 子タームを持つタームを含めるか含めないか
child_of 整数(タームID) 指定したタームの子だけでなく子孫を取得する
childless 真偽値 子を持たないタームのみ取得する
get 文字列 allにするとhide_emptyとchild_ofが無効になる?(ナンダロ)
name__like 文字列 ターム名のあいまい検索。キーワードが含まれてるものが返ってくる
description__like 文字列 descriptionの(ry)使用頻度低そうなので割合
pad_counts 1(true) or 0(false) 子孫タームを含めた投稿数を計算するかどうか
offset 整数 検索条件のnumberを設定した場合設定が可能。データの添え字をoffsetの設定した値から始める。何もしないとterm[0]、設定するとterm[5]
search 文字列(ターム名orスラッグ) ターム名かスラッグ名でタームを検索する
cache_domain 文字列 キャッシュにドメインを持たせられるらしいけど、使い時が分からない

利用例

こんな感じで利用すると良いのではないでしょうか…!

WordPressのカテゴリーはどうやって記事をグループ化してるの?

カテゴリを設定すると、wp_termsというテーブルにデータが格納されます。格納されたデータはterm_idというユニークなレコードで管理され、wp_postsのpost_id項目から、wp_term_relationshipsのwp_term_taxonomy項目を接続し、wp_termsのterm_idを参照しているはずです。とりあえずER図はこんな感じになっております。 wp_term_relationshipsん中に全種別の投稿に紐づけたタグだのカテゴリだのタクソノミーだのが全部入ってるんですね。全種別の投稿(固定、投稿、カスタム投稿)を一言で表す言葉を教えて下さい!!

終わりに

以上、テクノブレイブ名古屋オフィス開発1Gがお送りいたしました。軽く書くつもりが、長い長い記事となってしまいました。WordPressにお困りであったり、システム構築でお困りであったりWebサイトでお困りの方がもしいらっしゃいましたら、是非お気軽にご連絡下さい!!

参考

関数リファレンス/get terms データベース構造 テンプレートタグ/get the category
料金表ナビゲーション 料金表ナビゲーション

おすすめ記事