BBH
-Biz Branding Hub-
投稿日 : 
2019/08/21
更新日 : 
2019/08/21

WordPressでの記事にひもづくカテゴリ、タグを一覧取得する方法

WordPressでは、よくその記事に紐づいているカテゴリや記事を取得することがあります。
例えば、記事一覧上に表示する場合や、

記事詳細ページなどでよく見ますね。

今回は、こうした記事に紐づくカテゴリ、タグの一覧の取得方法について説明していきます。

ソースコード

sidebar.php

<div class="ArticleDetail_Category_Div">
	<?php
		// カテゴリー
		$categories = get_the_category();
		if($categories) {
			foreach($categories as $category){
				echo '<a href="' . get_category_link( $category->term_id ) . '" class="ArticleDetail_Category_Item">' . $category->name . '</a>';
			}
		}
		// タグ
		$tags = get_the_tags();
		if($tags) {
			foreach($tags as $tag){
				echo '<a href="' . get_category_link( $tag->term_id ) . '" class="ArticleDetail_Category_Item">' . $tag->name . '</a>';
			}
		}
	?>
</div>

function.php

function get_category_and_tag_arr() {
    $res = array();

    // カテゴリー
    $categories = get_the_category();
    if($categories) {
      foreach($categories as $category) {
        if($category->term_id !== 1) {  //Uncategorized(id=1)は除く
          array_push($res, [$category->term_id, $category->name]);
        }
      }
    }

    // タグ
    $tags = get_the_tags();
    if($tags) { 
      foreach($tags as $tag) {  
        array_push($res, [$tag->term_id, $tag->name]);
      }
    }

    return $res;
}

処理解説

大きな流れとしては、
・function.php の get_category_and_tag_arr() で記事に紐づくカテゴリとタグを取得
・sidebar.php で取得したカテゴリ、タグ一覧をもとにHTMLを生成
となっています。

記事に紐づくカテゴリとタグを取得

まずは、カテゴリ、タグの取得処理である、 get_category_and_tag_arr() を見ていきます。
カテゴリ、記事一覧の取得処理の関数はすでにWordPressの方で用意されているので、そちらを使用していきます。

カテゴリは、get_the_category()で取得可能です。
get_the_category()では、特に記事を指定しませんが、これは「現在の記事」のカテゴリを取得するという処理になります。
現在の記事というのは、表示しようとしている記事のことです。
Aという記事を表示する際は、get_the_category()の対象は記事Aになりますし、記事Bの時はBになります。
いちいち記事を指定しなくていいので、この仕組みを理解していれば、かなり使い勝手のいい関数です。

取得したカテゴリ一覧は、配列になって返ってきます。
ですので、foreachで一つずつ処理していきましょう。
この処理では、その前にif分で配列の中身があるかどうかを確認しています。
配列の中身がある(=記事にカテゴリが紐づいている)場合にforeachを実施する作りになっています。

foreach分では、カテゴリのIDと表示名を取得して結果の配列に入れています。
ここは、表示する際に使用するプロパティを指定すればよいです。
使用するプロパティが決まっていない場合は、
array_push($res, $category);
のようにカテゴリオブジェクトをそのまま配列に追加してしまえばよいでしょう。
むしろ、こちらの方が汎用的に使えるのでこっちの方がいい気がします。

タグの取得処理も基本は同じです。
get_the_tags() でタグを取得できます。

HTML生成処理

カテゴリとタグの一覧が取得できたら、次はそれをつかって表示するHTMLを生成します。
こちらは特に難しい部分はなく、取得したカテゴリ、タグ一覧をforeachでループさせて処理しています。

get_category_link( [カテゴリorタグID] ) でカテゴリやタグIDでのアーカイブページへのリンクを生成できます。
この処理もWordPressでは頻繁に使用するので、頭の片隅に置いておくとよいと思います。

Profile

管理人プロフィール

都内でITエンジニアをやってます。
変遷:中規模SES→独立系SIer→Webサービス内製開発
使用技術はその時々でバラバラですが、C#、AWSが長いです。
どちらかと言うとバックエンドより開発が多かったです。
顧客との折衝や要件定義、マネジメント(10名弱程度)の経験あり。
最近はJava+SpringBootがメイン。

Recommend