[WordPress] 混乱しやすいget_categoryとget_the_categoryの違いと使い分け方

 2016.03.09  2017.10.30

先日、カスタム投稿タイプのタクソノミーやターム関連のテンプレートタグや関数について書きましたが、カテゴリー関連のタグ・関数もたくさんありますよね。恐らくカスタム投稿よりカテゴリーの方が使用頻度は高いと思うので、カテゴリーで紛らわしい「get_category」と「get_the_category」についてまとめてみようと思います。

get_category

カテゴリーIDカテゴリーオブジェクトを指定して、カテゴリーの情報を取得します。

パラメーター

$category
(整数|オブジェクト)(必須):カテゴリー ID またはカテゴリー行オブジェクト
$output
(文字列)(オプション):定数 OBJECT, ARRAY_A または ARRAY_N
$filter
(文字列)(オプション):デフォルト(’raw’)では WordPress が予め定義したフィルターはどれも適用されません。

戻り値

カテゴリーアーカイブページcategory.phpにて、カテゴリー「お知らせ(news)」を表示している時の値です。

サンプルコード

カテゴリーアーカイブページ(category.php)では、変数$catには現在表示されているカテゴリーのIDが自動的に入ります。便利!
また、以下のような書き方もあります。

ここで「get_query_var(‘cat’); 」という気になる関数が出てきました。

get_query_var($var)とは、「グローバル $wp_query オブジェクトの WP_Query クラス内の public query variableを取得する」関数で、現在表示されているページの$wp_queryに入っている値を取り出すことができるようですが、catならカテゴリーID、post_typeなら投稿タイプ、が取得できます。

上記は「カテゴリーアーカイブページ(category.php)」でカテゴリー情報を取得し出力するための方法でしたが、投稿記事(single.php)が属するカテゴリー情報を取得するためには以下の「get_the_category」というテンプレートタグを使用します。

get_the_category

現在の投稿が属するカテゴリーの情報をオブジェクトの配列で返します。パラメータとして投稿 ID を渡すことで、ループの外でも使うことができます。

パラメーター

$id
(整数)(オプション):投稿 ID。
初期値: $post->ID (現在の投稿の ID)

戻り値

「webデザイン」と「本」という2つのカテゴリーに属する投稿記事(single.php)でカテゴリー情報を取得した場合。

サンプルコード

先頭のカテゴリーの名前を表示させます。上記の戻り値のサンプルだと、一番先頭のカテゴリは[0]の「Webデザイン」なので、「Webデザイン」と表示されます。

ループの外で投稿のカテゴリーを取得する場合

まとめ

というわけで、ページの種類によって使用する関数も変わることが分かりました。簡単に言うと、category.phpではget_category、single.phpではget_the_category(状況に応じてget_categoryも)を使う、ということでしょうか?

こちらのページに書かれているように、この2つのタグを条件分岐でひとつの変数にまとめると楽そうです。