WordPressでカテゴリ情報を取得する方法をいくつか試してみます。
カテゴリの分類
WordPressでカテゴリ情報を取得する関数はいろいろと用意されていますが、今回は「カテゴリ情報一式の取得」「単一カテゴリ取得」「特定の記事に紐づいたカテゴリ情報取得」の3つに分類して試してみます。
今回の例では以下のようなカテゴリを使用します。
- カテゴリーA(ID:1, slug:cata) 投稿数: 2件 説明: カテゴリAの説明文です
- カテゴリーA-2(ID:5, slug:cata-2) 投稿数: 2件 説明: カテゴリA-2の説明文です
- カテゴリーB(ID:3, slug:catb) 投稿数: 3件 説明: カテゴリBの説明文です
- カテゴリーB-2(ID:12, slug:catb-2) 投稿数: 0 説明: カテゴリB-2の説明文です
- カテゴリーC(ID:4, slug:catc) 投稿数: 0件 説明: カテゴリCの説明文です
カテゴリ情報一式の取得
まずは登録されているカテゴリ情報一式を取得する場合です。
get_categories()
get_categories()はカテゴリ情報を配列形式で一式取得できます。
上記で示したカテゴリ情報を取得して、主要な項目を出力してみます。
<?php $categories = get_categories(); ?> <ul> <?php foreach($categories as $category): ?> <li> ID: <?php echo $category->term_id; ?> カテゴリー名: <?php echo $category->name; ?> スラッグ: <?php echo $category->slug; ?> 説明文: <?php echo $category->description; ?> 親カテゴリーID: <?php echo $category->parent; ?> 投稿数: <?php echo $category->count; ?> </li> <?php endforeach; ?> </ul>
出力結果は以下の通りです。
<ul> <li> ID: 1 カテゴリー名: カテゴリA スラッグ: cata 説明文: カテゴリAの説明文です 親カテゴリーID: 0 投稿数: 2 </li> <li> ID: 5 カテゴリー名: カテゴリA-2 スラッグ: cata-2 説明文: カテゴリA-2の説明文です 親カテゴリーID: 1 投稿数: 2 </li> <li> ID: 3 カテゴリー名: カテゴリB スラッグ: catb 説明文: カテゴリBの説明文です 親カテゴリーID: 0 投稿数: 3 </li> </ul>
引数を設定しなかった場合、並び順は名前順で、記事の紐づいていないカテゴリは出力されない(ただし記事の紐づいている子カテゴリがある場合、その親カテゴリの記事数が0件でも出力される)ようになっています。
get_categories()については以前に記事を投稿していますので、具体的な使用例などはそちらをご確認ください。
get_terms()
get_terms()はタクソノミーのタームを取得する関数ですが、引数に’category’を指定することでカテゴリでも利用できます。
<?php $terms = get_terms('category'); ?> <ul> <?php foreach($terms as $category): ?> <li> ID: <?php echo $category->term_id; ?> カテゴリー名: <?php echo $category->name; ?> スラッグ: <?php echo $category->slug; ?> 説明文: <?php echo $category->description; ?> 親カテゴリーID: <?php echo $category->parent; ?> 投稿数: <?php echo $category->count; ?> </li> <?php endforeach; ?> </ul>
出力結果
<ul> <li> ID: 1 カテゴリー名: カテゴリA スラッグ: cata 説明文: カテゴリAの説明文です 親カテゴリーID: 0 投稿数: 2 </li> <li> ID: 5 カテゴリー名: カテゴリA-2 スラッグ: cata-2 説明文: カテゴリA-2の説明文です 親カテゴリーID: 1 投稿数: 2 </li> <li> ID: 3 カテゴリー名: カテゴリB スラッグ: catb 説明文: カテゴリBの説明文です 親カテゴリーID: 0 投稿数: 3 </li> </ul>
get_terms()も以前に記事を投稿していますので、詳しくはそちらをご確認ください。
単一カテゴリ取得
次に単一カテゴリを取得する場合です。
get_category_by_slug()
get_category_by_slug()は引数に指定したスラッグと一致するカテゴリ情報を返します。
<?php $category = get_category_by_slug('cata'); ?> ID: <?php echo $category->term_id; ?> カテゴリー名: <?php echo $category->name; ?> スラッグ: <?php echo $category->slug; ?> 説明文: <?php echo $category->description; ?> 親カテゴリーID: <?php echo $category->parent; ?> 投稿数: <?php echo $category->count; ?>
出力結果
ID: 1 カテゴリー名: カテゴリA スラッグ: cata 説明文: カテゴリAの説明文です 親カテゴリーID: 0 投稿数: 2
get_cat_ID()
get_cat_ID()は引数に指定したカテゴリ名と一致するカテゴリのIDを返します。
<?php $category = get_cat_ID('カテゴリA'); ?> ID: <?php echo $category; ?>
出力結果
ID: 1
get_cat_name()
get_cat_name()は引数に指定したカテゴリIDと一致するカテゴリ情報のカテゴリ名を返します。
<?php $category = get_cat_name(1); ?> カテゴリー名: <?php echo $category; ?> <hr>
出力結果
カテゴリー名: カテゴリA
get_term()
get_term()は第一引数に指定したIDと一致するターム情報を返しますが、第二引数に’category’を指定することでカテゴリでも利用できます。
<?php $term = get_term(1, 'category'); ?> ID: <?php echo $term->term_id; ?> カテゴリー名: <?php echo $term->name; ?> スラッグ: <?php echo $term->slug; ?> 説明文: <?php echo $term->description; ?> 親カテゴリーID: <?php echo $term->parent; ?> 投稿数: <?php echo $term->count; ?>
出力結果
ID: 1 カテゴリー名: カテゴリA スラッグ: cata 説明文: カテゴリAの説明文です 親カテゴリーID: 0投稿数: 2
get_term_by()
get_term_by()は第一引数と第二引数に指定した条件と値に基づいてターム情報を返しますが、第三引数に’category’を指定することでカテゴリでも利用できます。
<?php $term = get_term_by('slug', 'cata', 'category'); ?> ID: <?php echo $term->term_id; ?> カテゴリー名: <?php echo $term->name; ?> スラッグ: <?php echo $term->slug; ?> 説明文: <?php echo $term->description; ?> 親カテゴリーID: <?php echo $term->parent; ?> 投稿数: <?php echo $term->count; ?>
出力結果
ID: 1 カテゴリー名: カテゴリA スラッグ: cata 説明文: カテゴリAの説明文です 親カテゴリーID: 0 投稿数: 2
第一引数にはslug以外にもterm_idやnameなどが指定できます。
<?php $term = get_term_by('term_id', 3, 'category'); ?> ID: <?php echo $term->term_id; ?> カテゴリー名: <?php echo $term->name; ?> スラッグ: <?php echo $term->slug; ?> 説明文: <?php echo $term->description; ?> 親カテゴリーID: <?php echo $term->parent; ?> 投稿数: <?php echo $term->count; ?>
出力結果
ID: 3 カテゴリー名: カテゴリB スラッグ: catb 説明文: カテゴリBの説明文です 親カテゴリーID: 0 投稿数: 3
get_category_link()
get_category_link()は引数に指定したカテゴリIDと一致するカテゴリの一覧ページへのリンクを返します。
<?php $link = get_category_link(1); ?> リンク: <?php echo $link; ?>
リンク: http://XXXXX/xxxxx/category/cata/
single_cat_title()
single_cat_title()はカテゴリ別一覧ページでカテゴリ名を返し、それ以外のページではNULLを返します。
第二引数でfalseを指定していない場合、取得ではなく出力になります。
<?php $cat_title = single_cat_title('', false); ?> カテゴリー名: <?php echo $cat_title; ?>
カテゴリー名: カテゴリA
特定の記事に紐づいたカテゴリ情報取得
最後に記事詳細ページや記事のループ内で主に使用する、特定の記事に紐づいたカテゴリ情報を取得する場合です。
get_the_category()
get_the_category()は現在の記事または引数に指定した記事IDの記事に紐づくカテゴリ情報を返します。
<?php $category = get_the_category(); ?> <ul> <?php foreach($category as $cat): ?> <li> ID: <?php echo $cat->term_id; ?> カテゴリー名: <?php echo $cat->name; ?> スラッグ: <?php echo $cat->slug; ?> 説明文: <?php echo $cat->description; ?> 親カテゴリーID: <?php echo $cat->parent; ?> 投稿数: <?php echo $cat->count; ?> </li> <?php endforeach; ?> </ul>
固定ページなどでは空配列が返ってきますが、記事詳細や記事のループ内で使用した場合は以下のように取得できます。
<ul> <li> ID: 1 カテゴリー名: カテゴリA スラッグ: cata 説明文: カテゴリAの説明文です 親カテゴリーID: 0 投稿数: 2 </li> <li> ID: 5 カテゴリー名: カテゴリA-2 スラッグ: cata-2 説明文: カテゴリA-2の説明文です 親カテゴリーID: 1 投稿数: 2 </li> <li> ID: 3 カテゴリー名: カテゴリB スラッグ: catb 説明文: カテゴリBの説明文です 親カテゴリーID: 0 投稿数: 3 </li> </ul>
コメントが承認されるまで時間がかかります。