メニュー

WEBMEMOする。とあるクリエイターの個人的な備忘録。

今回は、WordPressのカテゴリ・タグ・タクソノミーの情報を、投稿IDではなくカテゴリ・タグIDなどのタームIDを指定指定して取得する関数をまとめていきます。

使用する場面は少ないかもしれませんが、これらの関数の役割をしっかり覚えておくと、他の関数とごっちゃにならずに済むと思いますので、是非参考にしてみてください。

似ていてややこしい、ループ内で現在の投稿に関するカテゴリ・タグ・タクソノミー情報を取得する方法は以下の記事の中でまとめてあるので、そちらと合わせてご覧ください。

では、いきましょう。

 

目次

    カテゴリ・タグ・タームIDの調べ方

    まずはカテゴリIDやタグIDを知らなくては、今回まとめていく関数たちは使えません。

    管理画面からカテゴリIDやタグIDを調べる方法を先にメモしておきます。

    カテゴリIDを調べる場合、管理画面の左メニューで、「投稿」 -> 「カテゴリー」と進むと、現在登録されているカテゴリが一覧で表示されるので、IDを知りたいカテゴリをクリックすると、詳細画面に移ります。

    この時のURLにIDが表示されています。

    …/wp-admin/term.php?taxonomy=category&tag_ID=123&post_type=…

    このように表示されている場合はカテゴリIDが「123」です。

    詳細画面まで行かなくとも、カテゴリの一覧画面でカテゴリ名にマウスホバーさせると、ウインドウの左下に( Chromの場合 )そのリンク先の情報が表示されると思います。そこからでももちろん読み取れます。

    総合的な情報オブジェクト・配列を取得する

    カテゴリ・タグ・タクソノミー全般用にそれぞれ以下のような関数があります。

    • get_category()
    • get_tag()
    • get_term()

    これらの関数を用いて取得できる情報オブジェクト・配列はほぼ同じですので、どんな情報が取得できるかを先にまとめておきます。

    WP_Termオブジェクトに含まれる情報

    カテゴリ・タグ・タクソノミーのターム情報は、WP_Termオブジェクトという形式で保存されています。

    共通で取得できる情報は以下の通りです。(オブジェクト形式で取得した場合)

    object(WP_Term)# (10) {
      ["term_id"]           => int()    //タームID
      ["name"]              => string() //ターム名
      ["slug"]              => string() //"タームスラッグ
      ["term_group"]        => int()    //タームグループID
      ["term_taxonomy_id"]  => int()    //タームタクソノミーID
      ["taxonomy"]          => string() //タクソノミー
      ["description"]       => string() //ターム説明
      ["parent"]            => int()    //親
      ["count"]             => int()    //投稿数
      ["filter"]            => string() //フィルタ
    }

    これに加え、get_category() を使用した時のみ、以下が追加されます。

      ["cat_ID"]                =>int()     //カテゴリID = ["term_ID"]
      ["category_count"]        =>int()     //投稿数 = ["count"]
      ["category_description"]  =>string()  //カテゴリ説明 = ["description"]
      ["cat_name"]              =>string()  //カテゴリ名 = ["name"]
      ["category_nicename"]     =>string()  //カテゴリスラッグ = ["slug"]
      ["category_parent"]       =>int()     //親 = ["parent"]
    

    ただ、これらはすでに取得できている情報とかぶっていますので、正直いらないです。

    さて、どんな情報が取得できるかわかったところで、それぞれの関数をまとめていきます。

    get_category()

    カテゴリIDを指定して、そのカテゴリ情報を取得します。

    get_category( $category, $output, $filter );

    3つの引数はそれぞれ次のような意味を持っています。

    引数 説明
    $category カテゴリーID または オブジェクト。必須。
    初期値: なし
    $output オブジェクトで取得するか、配列で取得するか
    初期値: ‘OBJECT’
    ( OBJECT: オブジェクト ARRAY_A : 連想配列, ARRAY_N, 普通の配列 )
    $filter フィルターを指定。デフォルト(‘raw’)ではどれも適用されない。
    初期値: ‘raw’

    例 : カテゴリID10のカテゴリの名前と投稿数を出力する

    $cat = get_category( 10 );   //情報オブジェクトを取得
    echo $cat->name;             //カテゴリ名を出力
    echo $cat->count;            //投稿数を出力
    

    get_tag()

    タグIDを指定して、そのタグ情報を取得します。

    get_tag( $tag, $output, $filter );

    3つの引数はそれぞれ次のような意味を持っています。

    引数 説明
    $tag タグID または オブジェクト。必須。
    初期値: なし
    $output
    オブジェクトで取得するか、配列で取得するか
    初期値: ‘OBJECT’
    ( OBJECT: オブジェクト ARRAY_A : 連想配列, ARRAY_N, 普通の配列 )
    $filter フィルターを指定。デフォルト(‘raw’)ではどれも適用されない。
    初期値: ‘raw’

    例 : タグID20のタグの名前と投稿数を出力する

    $tag = get_tag( 20 );   //情報オブジェクトを取得
    echo $tag->name;             //タグ名を出力
    echo $tag->count;            //投稿数を出力
    

    get_term()

    タームIDを指定して、そのターム情報を取得します。

    get_term( $term, $taxonomy, $output, $filter );

    4つの引数はそれぞれ次のような意味を持っています。

    引数 説明
    $term タームID または オブジェクト。必須。
    初期値: なし
    $taxonomy $term が含まれるタクソノミーのスラッグ。
    初期値: なし
    $output
    オブジェクトで取得するか、配列で取得するか
    初期値: ‘OBJECT’
    ( OBJECT: オブジェクト ARRAY_A : 連想配列, ARRAY_N, 普通の配列 )
    $filter フィルターを指定。デフォルト(‘raw’)ではどれも適用されない。
    初期値: ‘raw’

    **[修正しました (1027/11/10) ] – 第二引数の$taxonomyについて、日本語コーデックスを見ると必須と書いていましたが、WORDPRESS.ORGを見ると必須ではないようです。実際、$taxonomomyを指定しなくても無事に取得できました。

    例 : ‘language’というタクソノミーに含まれるタームID30のタームの名前と投稿数を出力する

    $term = get_term( 30 , 'language' );   //情報オブジェクトを取得
    echo $term->name;                         //ターム名を出力
    echo $term->count;                       //投稿数を出力

    オブェクトで取得 or 配列で取得 について

    それぞれ、引数$output でオブジェクトで取得するか配列で取得するかを指定できます。

    デフォルトでは’OBJECT’が指定されているので、冒頭で表示しているようなオブジェクト型 ( object(WP_Term) ) で情報が取得できます。

    ‘ARRAY_A’ を指定すると、次のような連想配列での取得になります。

    array() {
      ["term_id"]           => int()    //タームID
      ["name"]              => string() //ターム名
      ["slug"]              => string() //"タームスラッグ
      ["term_group"]        => int()    //タームグループID
      ["term_taxonomy_id"]  => int()    //タームタクソノミーID
      ["taxonomy"]          => string() //タクソノミー
      ["description"]       => string() //ターム説明
      ["parent"]            => int()    //親
      ["count"]             => int()    //投稿数
      ["filter"]            => string() //フィルタ
    }

    ‘ARRAY_N’ を指定すると、次のような普通の配列での取得になります。

    array() {
      [0]  => int()    //タームID
      [1]  => string() //ターム名
      [2]  => string() //"タームスラッグ
      [3]  => int()    //タームグループID
      [4]  => int()    //タームタクソノミーID
      [5]  => string() //タクソノミー
      [6]  => string() //ターム説明
      [7]  => int()    //親
      [8]  => int()    //投稿数
      [9]  => string() //フィルタ
    }

    オブジェクトと配列での値の扱い方の違いについては以下でまとめていますので、そちらをご覧ください。

    実はどれでも使える?

    例えばget_category()にタグのIDやカスタムタクソノミーのIDを指定したり、get_tag()にカテゴリIDを渡しても、普通に動作してくれます。

    そういえばカテゴリIDなどを調べる時に「category&tag_ID=〇〇」と表示されていましたもんね。「タクソノミー」として一つのくくりでIDが振り分けられているようです。

    ターム名を取得する

    最後に、ターム名を個別に取得できる関数についてまとめます。

    最初にまとめたWP_Termオブジェクトで言うと、[‘name’]にあたる情報です。

    これに関してはなぜか、これまでのように同じような関数が3つあるわけではなく(僕が調べ切れていないだけかもしれません)、

    以下の1つのみでした。

    • get_the_category_by_ID()

    get_the_tag_by_ID()とかあるのかな、と思って調べてみても出てこなかったです。

    以下の形式で使用します。

    get_the_category_by_ID( $cat_ID );

    引数は一つだけで、カテゴリIDを指定します。

    例 : カテゴリID 10のカテゴリ名を表示

    echo get_the_category_by_ID( 10 );

    これもまた、カテゴリだけではんく、タグやカスタムタクソノミーのタームIDを指定してもちゃんとその名前を取得できます。

    おまけ:get_term_by()

    上記の他、get_term_by() という関数もあります。個人的にはget_term()のややこしい版だと認識しており、ほとんど使う必要は無いと思っていますので、こんなんもあるよー、くらいにメモしておきます。

    get_term_by( $field, $value, $taxonomy, $output, $filter );

    タームをIDで指定するのか、スラッグで指定するのかを決めてから引数に情報渡します。

    取得できる情報オブジェクトはget_term()と同じWP_Termオブジェクトです。

    使用例:カテゴリID 10 の情報を取得

    $term = get_term_by('id', 10, 'category');
    - Thank you for reading this to the end. -

    コメントする

    CAPTCHA


    TOPへ Top