BLOG

ワードプレスの記事に属するタクソノミー(カテゴリーやタグなど)を取得する

ワードプレスでは、タクソノミー(分類)という機能があります。この分類は標準機能では「カテゴリー」や「タグ」、カスタマイズすると「カスタム分類(カスタムタクソノミー)」などがあります。
この機能は記事や固定ページに所属させることができ、管理ページの右側にチェックするリストが表示されます。
今回はこの分類機能について紹介したいと思います。

ポイント

  • ワードプレスでは、タクソノミー(分類)は「taxonomy」、分類の各項目は「term」と命名されている

  • タームはカテゴリーやタグなど同じ関数get_the_terms()で取得でき、$taxonomyのパラメーターを変えることで変更できる

  • タームは複数(配列)データなので、foreachなどで展開させる必要がある

ワードプレスのカテゴリーやタグなどの分類機能について理解しよう

ワードプレスは、標準の分類機能で、記事にカテゴリータグなどの選択する機能が存在します。しかしワードプレス上のカテゴリーと世の中で言うカテゴリーは認識ががずれている場合があります。

世の中の「カテゴリー」と表現する場合、分類1つ1つの項目を示すことが一般的です。
しかし、ワードプレスなどのCMSの場合は少し異なります。

ワードプレスの場合、分類の種類1つをカテゴリーと呼び、分類の項目のことをタームと表現します。
カテゴリーの各分類項目のことをカテゴリータームと呼ぶこともあります。

カテゴリー等分類の認識をワードプレス的に理解しよう

ワードプレス上の分類は下のように種類を指します。カテゴリー(タクソノミー)タームと混在しないように気を付けよう。

(カテゴリー)※分類の種類がカテゴリー
・ターム1
・ターム2
・ターム3

(タグ)※分類の種類がタグ
・ターム1
・ターム2
・ターム3

カテゴリーやタグ、カスタム分類は同じ関数で取得ができる

現在の記事に属するタームを取得する場合の基本関数は下のコードで取得できる。記事に属するタームは複数選択ができる仕様になっているため、1つでも複数形(配列)になるので注意が必要です。

<?php $terms = get_the_terms( $id, $taxonomy ); ?>
  • ※$id:記事の投稿ID
  • ※$taxonomy:categoryなど

サンプルコード

下のコードは投稿記事内のループ内で、投稿IDからタクソノミー(カテゴリー)を取得してカテゴリーリストを表示させるサンプルコードです。「$taxonomy」を書き換えることでカスタム分類やタグに変更が可能です。

<?php

	 $taxonomy = 'category';//$taxonomyは初期値がないため、タクソノミーのSLUGを指定する
     $post_id = '';
     $post_in_terms = array();
     $term          = array();
     $post_term_list = array();
     $post_category = '';
      
     //get
     $post_id       = get_the_ID();//記事IDを取得する
     $post_in_terms = get_the_terms( $post_id, $taxonomy );;//記事IDからカテゴリーを配列で取得する
      
     if(!empty($post_in_terms))://カテゴリーが1件以上あったときの処理
      
       foreach($post_in_terms as $term)://カテゴリーは配列関数なのでforeachを使う
          $post_term_list[] = esc_html($term -> name);//category名を取得して配列に格納する
            /*
            //取得できる配列
            //配列から好きなデータを取得が可能
            stdClass Object
            (
                [term_id] =>
                [name] =>
                [slug] =>
                [term_group] => 
                [term_order] => 
                [term_taxonomy_id] =>
                [taxonomy] =>
                [description] => 
                [parent] =>
                [count] =>
                [object_id] =>
            )
            */
       endforeach;
       
       if(!empty($post_cat_list))://カテゴリー名をカンマ区切りで変数にする
          $post_category = implode(',', $post_term_list );//配列データを連結させる
       endif;

     endif;//END カテゴリ

	echo $post_category;//タームがマンマ区切りで表示される


?>