CommentOut

WordPressでカテゴリー名やカテゴリースラッグを取得する方法 WordPressでカテゴリー名やカテゴリースラッグを取得する方法

WordPressでカテゴリー名やカテゴリースラッグを取得する方法

公開日:  最終更新日:

今さらって感じもしますが、いざ使おうとすると忘れてしまいますよね。
そこで、改めて、カテゴリーの取得方法をテンプレート別にまとめようと思います。

archive.phpやcategory.phpでカテゴリー名を取得する場合

archive.phpやcategory.phpなど、いわゆるカテゴリー一覧ページのテンプレートでカテゴリー名を取得する時のパターンです。

カテゴリータイトルを取得するにはsingle_cat_title()を使う

single_cat_title()はカテゴリー名を取得する関数です。
single_cat_title()の使い方としては以下の通りです。

<h1><?php single_cat_title(); ?></h1>

ちなみに、single_term_title()という関数もあるようです。

single_cat_title()をループの外で呼び出した場合

archive.phpやcategory.php内であれば、ループの外でも問題なくカテゴリー名を取得できました。

single_cat_title()をループの中で呼び出した場合

ループ内でも、もちろん選択中のカテゴリー名が取得できました。

このような結果から、single_cat_title()の動きとしては以下の物と同じなのかと思います。

// 以下の2つは同じくカテゴリー名が表示される
<h1><?php single_cat_title(); ?></h1>
<h1><?php echo get_category(get_query_var('cat'))->name; ?></h1>

archive.phpやcategory.phpでカテゴリーIDを取得する場合

archive.phpやcategory.phpなど、いわゆるカテゴリー一覧ページのテンプレートでカテゴリーIDを取得する時のパターンです。

カテゴリーIDを取得するにはget_query_var(‘cat’)を使う

さっき出てきましたが、カテゴリー名ではなく、カテゴリーIDを取得したい場合はget_query_var(‘cat’)を使用します。
get_query_var(‘cat’)の使い方は以下の通りです。

<?php
// 一度カテゴリーIDを取得する必要がある
$cat_id = get_query_var('cat');
?>

get_query_var(‘cat’)をループの外で使う場合

archive.phpやcategory.php内であれば、ループの外でも問題なくカテゴリーIDを取得できました。

get_query_var(‘cat’)をループ内で使う場合

ループ内でも、同様に選択中のカテゴリーIDが取得できました。
get_query_var(‘cat’)はループに関係なく動作するようです。

archive.phpやcategory.phpでカテゴリーオブジェクトを取得する方法

archive.phpやcategory.phpなど、いわゆるカテゴリー一覧ページのテンプレートでカテゴリーオブジェクトを取得する時のパターンです。
上記のカテゴリー名やカテゴリーIDが取得できれば大抵のことはできると思いますが、スラッグ名を取得したい場合などは、カテゴリーオブジェクトからアクセスする方法もあります。(get_query_var(‘category_name’)でもカテゴリースラッグが取得できます。)

カテゴリーオブジェクトを取得するにはget_category()を使う

カテゴリーオブジェクトを取得する場合にはget_category()が使えます。
似た関数で、get_categories()がありますが、こちらはWordPressに設定されたカテゴリー一覧を取得する関数です。

get_category()の使い方は以下の通りで、先ほどのget_query_var(‘cat’)を使って、一度カテゴリーIDを取得する必要があります。

<?php
// 一度カテゴリーIDを取得する必要がある
$cat_id = get_query_var('cat');
// カテゴリーIDを元に、一致するカテゴリーオブジェクトを取得する
$cat = get_category($cat_id);
?>

get_category()をループの外で使う場合

こちらも先ほどと同様にループ外でも問題なく使うことができます。

get_category()をループ内で使う場合

ループ内でも問題なく取得できました。

archive.phpやcategory.phpでWordPressに設定されているカテゴリーの一覧を取得する場合

archive.phpやcategory.phpでは、ページに設定されているカテゴリーは1つですが、WordPress自体にはカテゴリーは複数登録されていることが多いですよね。
そこで、WordPressに設定されているカテゴリーの一覧を取得する方法をご紹介します。

WordPressに設定されているカテゴリー一覧を取得する場合はget_categories()を使う

<?php
$categories = get_categories(array(
    'hide_empty' => false
));
foreach ($categories as $category) {
    // カテゴリーリンクを取得
    $category_link = get_category_link($category->term_id);
    echo "<a href='{$category_link}'>{$category->name}({$category->count})</a>";
}
?>

get_categories()には引数があり、配列型でカテゴリーリストの取得条件を設定できます。
上記の例では「記事が登録されていないカテゴリーも取得しますよ」という条件になっています。
get_categories()の引数について、詳細はこちらをご確認ください。

こちらもループ内外問わずに使うことが可能です。

記事に設定されているカテゴリー一覧を取得する場合はget_the_category()を使う

今度は各記事に設定されたカテゴリーの一覧を取得する方法をご紹介します。

<?php
$categories = get_the_category(array(
    'hide_empty' => false
));
foreach ($categories as $category) {
    // カテゴリーリンクを取得
    $category_link = get_category_link($category->term_id);
    echo "<a href='{$category_link}'>{$category->name}({$category->count})</a>";
}
?>

さっきはget_categoriesでした。今度はget_the_categoryです。間違えないでくださいね。
こちらの関数は記事に設定されているカテゴリーリストを取得してくる関数なので、ループ内かsingle.phpで使用するのが適切です。

小休止:WordPressの関数名には共通点(特徴)がある

WordPressでは、投稿や固定ページに関連する関数には『the_』が付きます

  • the_title
  • the_content
  • the_category 等

さらに、その場で表示せず、変数に格納する場合は『get_』が付きます。

  • get_the_title
  • get_the_ID
  • get_the_post_thumbnail_url
  • get_the_permalink 等

逆に、サイト設定やサイト全体の設定を取得する時には『the_』が付きません。

  • get_categories
  • get_category 等

これだけ覚えておくだけでも関数が思い出しやすくなると思います。

宣伝
WordPressサイトのテンプレート編集やトラブル対応、バグ修正、簡単なJavascriptの作成(カルーセルやバリデーション等)など、小規模なスポット対応を受け付けております。
もしお困りごとがありましたら、お問い合わせフォームよりご相談ください。

この記事を書いた人

uilou

uilou

プログラマー

基本的に、自分自身の備忘録のつもりでブログを書いています。 自分と同じ所で詰まった人の助けになれば良いかなと思います。 システムのリファクタリングを得意としており、バックエンド、フロントエンド、アプリケーション、SQLなど幅広い知識と経験があります。 広いだけでなく、知識をもっと深堀りしていきたいですね。