WordPress:カテゴリの取得方法まとめ
WordPressでカテゴリを取得する方法をまとめました。
どのページで取得するかや用途・目的によって方法が違うので使い分けましょう。
投稿記事のカテゴリを取得する
投稿記事のカテゴリを取得する場合はget_the_category($post_id)関数を使います。get_the_category($post_id)は、引数$post_idで指定したIDの投稿のカテゴリを返す関数です。引数$post_idには現在の投稿IDがデフォルト値として入るため、投稿ループ内では省略できます。
実際に投稿記事のカテゴリを取得する記述例は下記の通り。
<?php
//投稿のカテゴリを取得するコード例
$categories = get_the_category($post_id); //投稿が属するカテゴリを取得(ループ内では引数省略可)
foreach($categories as $cat){ //取得したカテゴリを一つずつ処理
$cat_id = $cat->cat_ID; //カテゴリID
$cat_name = $cat->cat_name; //カテゴリ名
$cat_slug = $cat->slug; //スラッグ
$cat_description = $cat->description; //カテゴリの説明
$cat_count = $cat->count; //カテゴリの投稿数
$cat_parent = $cat->parent; //親カテゴリのID
$cat_term_group = $cat->term_group; //カテゴリのグループ
$cat_term_taxonomy_id = $cat->term_taxonomy_id; //カテゴリのタクソノミーID
$cat_taxonomy = $cat->taxonomy; //タクソノミー名(category)
$cat_link = get_category_link($cat_id); //カテゴリのURL
}
?>
補足:投稿ループ外でのget_the_category()の使用は注意
投稿ループ外でget_the_category()を引数の投稿idを省略して使うと、下の表のように取得できるカテゴリが流動的になるため注意が必要です。ループ外で使用する場合は引数を省略しないようにしましょう。
| 投稿idを省略した場合 | 投稿idを省略しない場合 | ||
|---|---|---|---|
| 記述場所 | ループ内 | ループ外 | ループ内・外 |
| ホームページ | 〇:現在ループの投稿のカテゴリが取得される | △:最新の投稿のカテゴリが取得される | 〇:$post_idで指定した投稿のカテゴリが取得される |
| 投稿ページ | 〇:現在ループの投稿のカテゴリが取得される | △:そのページの投稿のカテゴリが取得される | 〇:$post_idで指定した投稿に紐づくカテゴリが取得される |
| カテゴリページ | 〇:現在ループの投稿のカテゴリが取得される | △:そのカテゴリの最新の投稿のカテゴリが取得される | 〇:$post_idで指定した投稿のカテゴリが取得される |
| 検索結果ページ | 〇:現在ループの投稿のカテゴリが取得される | △:検索結果の最新の投稿のカテゴリが取得される | 〇:$post_idで指定した投稿のカテゴリが取得される |
| 固定ページ | ×:カテゴリ取得不可 | ×:カテゴリ取得不可 | 〇:$post_idで指定した投稿のカテゴリが取得される |
全てのカテゴリの一覧を取得する
すべてのカテゴリを取得するにはget_categories()関数を使います。
<php?
$categories = get_categories();
foreach($categories as $cat){
$cat_id = $cat->cat_ID; //カテゴリID
$cat_name = $cat->cat_name; //カテゴリ名
$cat_slug = $cat->slug; //スラッグ
$cat_description = $cat->description; //カテゴリの説明
$cat_count = $cat->count; //カテゴリの投稿数
$cat_parent = $cat->parent; //親カテゴリのID
$cat_term_group = $cat->term_group; //カテゴリのグループ
$cat_term_taxonomy_id = $cat->term_taxonomy_id; //カテゴリのタクソノミーID
$cat_taxonomy = $cat->taxonomy; //タクソノミー名(category)
$cat_link = get_category_link($cat_id); //カテゴリのURL
}
?>
カテゴリページでそのカテゴリを取得
カテゴリページでそのページのカテゴリを取得したい場合は、get_query_var($var)とget_category($cat_id, $output, $filter)を使います。
get_query_var()は引数に'cat'を指定すると、カテゴリページではカテゴリIDが取得できます。またget_category()は、引数で指定したカテゴリIDのカテゴリを取得します。
実際にカテゴリページでそのカテゴリを取得するコードは下記の通り。
<?php
$cat_id = get_query_var('cat'); //カテゴリIDを取得(カテゴリページでのみ使用可)
$cat = get_category($cat_id); //カテゴリを取得
$cat_id2 = $cat->cat_ID; //カテゴリID(参考のため再取得)
$cat_name = $cat->cat_name; //カテゴリ名
$cat_slug = $cat->slug; //スラッグ
$cat_description = $cat->description; //カテゴリの説明
$cat_count = $cat->count; //カテゴリの投稿数
$cat_parent = $cat->parent; //親カテゴリのID
$cat_term_group = $cat->term_group; //カテゴリのグループ
$cat_term_taxonomy_id = $cat->term_taxonomy_id; //カテゴリのタクソノミーID
$cat_taxonomy = $cat->taxonomy; //タクソノミー名(category)
$cat_link = get_category_link($cat_id); //カテゴリのURL
?>
get_query_var(‘cat’)はどこで使えるのか
get_query_var('cat')が使えるのはカテゴリページのみです。他のページでは値が得られません。またループ内/外どちらで使用していも結果は同じです。
| get_query_var(‘cat’); | ||
|---|---|---|
| 記述場所 | ループ内 | ループ外 |
| ホームページ | ×:取得不可 | ×:取得不可 |
| 投稿ページ | ×:取得不可 | ×:取得不可 |
| カテゴリページ | 〇:そのページのカテゴリIDが取得される | 〇:そのページのカテゴリIDが取得される |
| 検索結果ページ | ×:取得不可 | ×:取得不可 |
| 固定ページ | ×:取得不可 | ×:取得不可 |
