メニュー

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

WordPressをいじっていると、投稿ページや固定ページなど、そのページが持つ情報を取得するというのは日常茶飯事かと思います。

しかし、ひとつの情報に対し、取得する方法が複数あってなにかとややこしい

テンプレートタグや関数を使えばいいってのはわかるんだけど、綴りとか覚えきれなくて同じことを何度も調べなおしてしまったり。ていうか、似たような関数いっぱいあるけど違いが分からないまま、その時調べて出てきたやつを使ってるけどいいのだろうか…。

と、いうことで、自分でも散らかった知識を整理するために今回は固定ページ・投稿ページの様々な情報を取得する方法をまとめていこうと思います。

この記事では「ループ」という表現を多用しています。もしWordPress初心者の方が見ておられましたら、予備知識としてWordPressのループについて勉強してみてください。

 

目次

    基本的な情報を一括で取得

    まずは投稿・固定ページに共通する、基本情報(投稿のIDやタイトルやなど)の取得方法をまとめていきます。

    • $post
    • get_post()

    上記2つを使用することで基本情報は簡単に取得できるので、それぞれまとめていきます。

    グローバル変数 $post を用いる

    ループ内であれば、現在の投稿の基本情報は、すでに$post というグローバル変数に格納されています。

    取得できる情報一覧

    $post->ID                     //投稿ID (int)
    $post->post_author            //投稿者ID (string)
    $post->post_date              //投稿日時 (string)
    $post->post_date_gmt          //投稿日時(GMT) (string)
    $post->post_content           //投稿内容 (string)
    $post->post_title             //投稿タイトル (string)
    $post->post_excerpt           //投稿内容(抜粋) (string)
    $post->post_status            //投稿状態('publish'、'private'など) (string)
    $post->comment_status         //コメント投稿状態('open'など) (string)
    $post->ping_status            //トラックバック/ピンバック受付状態('open'など) (string)
    $post->post_password          //パスワード(公開状態がパスワード保護時) (string)
    $post->post_name              //スラッグ名(パーマリンク設定で%postname%使用時) (string)
    $post->to_ping                //ピン通知 URL (string)
    $post->pinged                 //ピン通知済み URL (string)
    $post->post_modified          //更新日時 (string)
    $post->post_modified_gmt      //更新日時(GMT) (string)
    $post->post_content_filtered  //フィルター? (string)
    $post->post_parent            //親ID  (固定ページや添付ファイルなどで使用) (int)
    $post->guid                   //ページURL (デフォルト型) (string)
    $post->menu_order             //固定ページの表示順序 (int)
    $post->post_type              //投稿情報タイプ('post'、'page'など) (string)
    $post->post_mime_type         //添付ファイルのときMIMEタイプ (string)
    $post->comment_count          //コメント数 (int)
    $post->filter                 //適用されたフィルター名('raw'など) (string)
    $post->ancestors              //親やその親ページの投稿IDの配列(固定ページで親ページがある場合など) (array)
    

    以上のような情報が、簡単に取得できます。

    *ancestorsについての謎 : var_dump( $post ); しても出力されないが、普通に echo $post->ancestors; すると表示される…。何故だかわかる人いらっしゃいませんか(笑)

     

    よく使うものをピックアップすると次のような感じでしょうか。

    $ID      = $post->ID;                // ページID
    $title   = $post->post_title;        // タイトル
    $date    = $post->post_date;         // 投稿日時
    $content = $post->post_content;      // コンテンツ内容
    $slug    = $post->post_name;         // スラッグ
    $parent  = $post->post_parent;       // 親のID
    $url     = $post->guid;              // ページURL
    

    *$post などのグローバル関数はバージョンアップに伴って使用の変更があるかもしれないので、この下にあるget_post()や後述する専用の関数を使用するほうが安全だという意見もあるようです。また、初心者の方は意図せずしてグローバル変数を汚染してしまうことを防ぐためにも、不用意に使用すべきではないかもしれません。

    get_post() を用いる

    先ほどの$postは、ループ内のその投稿についての情報しか取得できませんが、get_post()を使用すると、引数に投稿IDを渡すことでその投稿に関する情報を簡単に取得できます。

    ループ中であれば、引数を省略すると自動的にその投稿に関する情報を取得できます。

    例 : よく使う情報の取得

    $post_data = get_post();
    $ID        = $post_data->ID;                // ページID
    $title     = $post_data->post_title;        // タイトル
    $date      = $post_data->post_date;         // 投稿日時
    $content   = $post_data->post_content;      // コンテンツ内容
    $slug      = $post_data->post_name;         // スラッグ
    $parent    = $post_data->post_parent;       // 親のID
    $url       = $post_data->guid;              // ページURL
    

    そのほか、取得できる情報は$postと同じです。

    *  get_posts() という、get_post()と見た目が非常に似ている関数もありますが、これは全くの別物ですので注意しましょう。

    get_page()は避ける

    固定ページの基本情報を取得できる関数でget_page() というのもありますが、バージョン3.5から get_page() は非推奨になっています。

    固定ページでも、get_post()を使用しましょう。

    基本的な情報の中から個別の情報だけを取得

    先程のget_post()は投稿が持つ情報を全て取得してきますが、IDやタイトルなど、特定の情報にフォーカスして、取得や出力を行う関数があります。

    よく使うもの

    たぶんよく使うものリスト(取得)

    get_the_ID();              //現在の投稿ID(引数はありません)
    get_the_title();           //タイトル
    get_the_date();            //投稿日
    get_the_time();            //投稿日時
    get_the_modified_time();   //更新日
    get_the_content();         //本文
    get_post_ancestors();      //親ID(先祖全て)
    get_permalink();           //URL
    the_post_thumbnail();      //アイキャッチ画像 *注意
    

    上記の関数たちは、頭のget_を外すと出力までしてくれるようになるものがほとんどです。また、引数を指定しない場合は自動的にループ中の投稿IDが渡されます。

    $postを使用するよりもこれらの関数を使用することを推奨しているサイトをよく見かけます。実際、$post->IDでは意図した動作をしてくれないが、get_the_ID()だと普通に動作する、という場合もあったりしますので、これらの個別関数を使用する方が無難かもしれません。(もしくはget_post()を使用する)

    引数に投稿ID以外を指定できるものがありますので、特に覚えておく必要はなさそうなので記載しませんが「引数はIDだけじゃないんだな」と、頭の片隅にでも置いておきましょう。

    パーマリンク・URLの取得関数について

    先程の「たぶんよく使うものリスト」ではget_permalink() のみ記載していますが、パーマリンク・URLを取得できる関数は他にもいくつかあってややこしいです。

    基本的にはget_permalink()だけ覚えていればいいと思いますが、以下のページでややこしい関数たちをまとめてみましたので、お時間があれば是非こちらもチェックしてみてください。

    アイキャッチ画像の出力関数について

    「たぶんよく使うものリスト」にも記載しているように、標準の関数ではthe_post_thumbnail() が用意されています。

    が、出力がすごく汚いです。すっごく、汚いです。

    これらの出力を綺麗にする方法を以下の記事でメモしていますので、綺麗なソースコードを出力させたい方は是非以下も参考にしてみてください。

    固定ページ特有の情報

    固定ページでのみ取得できる情報に関してまとめていきます。

    親情報

    親情報の取得方法について。

    手順としては、まずは親ページのIDを取得してから、get_post() などを使用してその親ページの情報を取得します。

    get_post()で取得したオブジェクトの中に親IDの情報が入っており、post_parentというキーで取得できます。

    例1 : 直近(一つ上)の親情報を取得

    <?php
      $parent_id    = get_post()->post_parent;             // 親ページのIDを取得 
      $parent_slug  = get_post($parent_id)->post_name;     // 親ページのスラッグを取得 
      $parent_title = get_post($parent_id)->post_title;    // 親ページのタイトルを取得 
      $parent_url   = get_permalink($parent_id);           // 親ページの URL を表示
    ?>

    また、テンプレートタグの get_post_ancestors()という関数を使用して親IDを取得することもできます。

    この関数は全ての親に関するIDを取得できるので、最上位の親の情報が取得したい場合などは、この関数を使用することになるかと思います。

    get_ancestors()という似た名前の関数もあって少しややこしかったので、別ページにてまとめています。違いを比較しながら使用例を紹介してますので、こちらも参考にしてみてください。

    テンプレート情報

    次はテンプレート情報についてです。

    現在のページのテンプレートファイル(テンプレートが宣言されているファイルの情報は、グローバル変数 $templateに保存されています。

    *テンプレートファイルとは、以下の様な宣言をしているファイルです。個別ページではデフォルトテンプレート( page.php )意外にも自由にテンプレートを作成できます。

    <?php
    /*
    Template name: My_Template
    */

    $templateに保存されている値は、テンプレートファイルの絶対パス(サーバーのルートからのパス) です。

    絶対パスをそのまま取得するとすごく長くなるので、以下のようにして最後のファイル名だけを取得しておくのが定番。

    例:テンプレートファイル名を取得する

    <?php
      global $template;       //$templateの呼び出し
      $template_name = basename($template, '.php');
    ?>
    

    これによって、例えば$templateに「 /home/user/…/my_template.php 」という絶対パスが入っているならば、「 my_template 」の部分だけが $template_name に代入されます。

    * basename($template, ‘.php’) の第二引数部分 、’.php’ の記述をなくせば、「my_template.php」 が取得される。

    ちなみに、デフォルトのテンプレートファイルpage.phpですので、上記の例であれば、デフォルトテンプレートを使用しているページでは $template_name が 「 page 」となります。

    カスタムフィールド

    次は、カスタムフィールドの情報を取得する方法をまとめていきます。

    • get_post_custom()
    • get_post_meta()
    • post_custom()

    の3つについてメモ。

    get_post_custom()

    1つ目。投稿IDを指定してカスタムフィールドの全情報を取得します。

    get_post_custom( $post_id );

    引数には投稿IDを指定し、その投稿や固定ページが持つすべてのカスタムフィールドの情報を配列で取得します。

    *カスタムフィールドが設定されていない場合の戻り値は「 false 」です

    get_post_meta()

    2つ目。投稿IDに加え、キーを指定してカスタムフィールドの値を取得

    get_post_meta( $post_id, $key, $single );

    引数が3つあるので表でまとめます。

    引数 説明
    $post_id カスタムフィールドを取得したい投稿のID。 初期値: なし
    $key カスタムフィールドのキー。 初期値: ”
    $single 真偽値を指定。true をセットした場合、指定した$keyに対して先頭の値を文字列として出力します。false または値をセットしなかった場合、関数はカスタムフィールドの配列を返します。 初期値: false

    第3引数の$singleがfalseの場合、値が一つでも複数でも配列で取得します。

    例:現在の投稿の、”brand”というキーのカスタムフィールドを取得

    //値が一つの場合
    $brand = get_post_meta( get_the_ID(), 'brand', true );
    echo $brand;
    
    //値が複数の場合
    $brands = get_post_meta( get_the_ID(), 'brand');
    foreach( $brands as $brand ){
      echo $brand;
    }

    この例では現在の投稿IDの取得にget_the_ID() を使用しています。これは、引数$post_id についてCodex日本語版に以下のような注意書きがあったからです。

    ループ内で投稿の ID を取得するには get_the_ID() を、サブループ内では投稿オブジェクトの ID プロパティ(例: $my_post_object->ID)を使用してください。グローバルの $post->IDを使うこともできますが、これは常にあなたが意図したものとは限りません。

    もし挙動が意図したものにならない場合、投稿IDの指定の仕方を見直してみるといいかもしれないです。

    また、投稿ID だけを指定した場合は、その投稿が持つすべてのカスタムフィールドの値を配列として返します。

    *もしも関数が返す値がなかった場合、空の配列を返しますが、$single に true を指定している場合は、空の文字列を返すことにも注意しましょう。

    post_custom()

    キーを指定してカスタムフィールドの値を取得します。この関数はループ内限定で使用できます。

    post_custom( $key );

    引数は1つだけで、カスタムフィールドのキーを指定します。

    値が1つの場合は文字列を、複数の場合は配列を返します。

    つまり、値が1つの場合も複数の場合も考えられる時は、返り値の型が定まりません。そういう場合は get_post_meta() を使用しましょう。

    *カスタムフィールドが設定されていない場合の戻り値は「 false 」です

    投稿タイプ

    続いて、投稿に紐づいた投稿タイプ(ポストタイプ)についての情報の扱い方をまとめていきます。

    get_post_type()

    その投稿がどの投稿タイプのものなのかをスラッグで取得する関数です。こいつが肝になってきます。

    get_post_type( $post );

    引数は一つ。投稿IDまたはオブジェクトを指定するとその投稿の投稿タイプがスラッグで取得できます。

    デフォルトでは現在の投稿IDが参照されます。

    返り値は以下の通りです。

    投稿タイプ 返り値
    デフォルトの投稿ページの場合 ‘post’
    カスタム投稿ページの場合 ‘そのカスタム投稿のスラッグ’
    固定ページの場合 ‘page’
    添付ファイルの場合 ‘attachment’
    リビジョンの場合 ‘revision’
    ナビゲーションメニューバー ‘nav_menu_item’

    投稿タイプの情報を取得する関数は、引数に投稿タイプのスラッグを指定するものが多いので、まずはこのget_post_type()でスラッグを取得してから、他の関数を使用して様々な情報を取得する事が可能です。

    使用例:現在の投稿の投稿タイプスラッグを取得

    $post_slug = get_post_type(get_the_ID()); //投稿タイプのスラッグを取得

    *基本的にループ中であれば、上記のget_the_ID()はなくても大丈夫です

    get_post_type_archive_link()

    投稿タイプに関するアーカイブページへのURLを取得する関数です。

    get_post_type_archive_link( $post_type );

    引数は一つで、投稿タイプのスラッグを指定することで、その投稿タイプに関するアーカイブページへのURLガ取得できます。

    上記のget_post_type() と組み合わせて使用できます。

    使用例:現在の投稿の投稿タイプのアーカーブページURLを取得

     $post_slug = get_post_type(); //投稿タイプのスラッグを取得
    $post_url = get_post_type_archive_link($post_slug); //アーカイブリンク取得

    get_post_type_object() 

    投稿タイプに関する情報オブジェクトを取得します。投稿タイプの様々な情報はこいつで取得できます。

    get_post_type_object( $post_type );

    引数は一つ。投稿タイプのスラッグを指定します。

    主にラベル名( 投稿タイプ名 )の取得に使用することが多いのではないでしょうか。

    例えば、ラベル名( 投稿タイプ名 )は [‘label’] というキーに保存されています。

    例 : 現在の投稿のカスタム投稿タイプの名前(ラベル)をリンク付きで出力

    <?php
      $post_slug  = get_post_type();                             //投稿タイプのスラッグを取得
      $post_url   = get_post_type_archive_link($post_slug);      //アーカイブリンク取得
      $post_label = get_post_type_object($post_slug)->label;  //投稿タイプ名を取得
      echo '<a href="'.$post_url.'">'.$post_label.'</a>';        //出力
    ?>

    ラベル名の他にも、get_post_type_object()で取得したオブジェクトには多くの情報が詰まっていますが、今回は割愛します。詳しく知りたい方は、Codex日本語版をご覧ください。

    カテゴリー

    続いては投稿ページに関する情報の扱い方をまとめていきます。まずはカテゴリ情報について。

    the_category()

    the_category() は投稿に設定されているカテゴリ情報をリンク付きで出力してくれます。

    簡単に使える分、扱える情報は少ないです。

    the_category( $separator, $parents, $post_id );
    引数 説明
    $separator カテゴリへのリンクを区切る文字列や記号。デフォルトでは番号なしリスト(<ul>)でリンクを出力。
    初期値 : 空の文字列
    $parents 記事が子カテゴリに属するときの表示の仕方。オプションは以下:
     ’multiple’ – 親と子のカテゴリへのリンクを別々に表示し、見た目は「親/子」になります。
     ’single’ – 子カテゴリへのリンクのみを表示しますが、見た目は「親/子」になります。
    初期値 : 空の文字列
    $post_id カテゴリを取得する投稿ID。 デフォルトでは現在の投稿について。
    初期値 : false

    引数に何も指定せずにそのまま呼び出すと、デフォルト設定のulタグによるリスト形式で出力されます。

    普通にテキストを並べたい場合は$separatorに区切り文字を指定するのを忘れないようにしましょう。

    例 : 「 , 」区切り文字でカテゴリを羅列表示(親なし&あり)

    //「 , 」 区切りで表示させる(カテゴリ1, カテゴリ2, カテゴリ3)
    <?php the_category(', '); ?>
    
    //「 , 」 区切りかつ、親カテゴリも表示( 親A/子a, 親A/子b, 親B/子c )
    <?php the_category(', ', 'multiple'); 

    get_the_category_list()

    get_the_category_list()the_category()の取得版です。the_category()と同じ引数で使用でき、出力はせずに取得できます。

    get_the_category_list( $separator, $parents, $post_id );

    使い方はほぼ同じなので説明は省きます。

    「the_category() = echo get_the_category_list()」 です。

    get_the_category()

    get_the_category() は、投稿に設定されているカテゴリに関する情報オブジェクトの配列を取得します。the_category() よりも詳細な情報を扱いたい時や、出力の仕方をもっと自由にしたい場合は、この関数を使用します。

    get_the_category( $post_id );

    get_the_category() の引数に投稿IDを指定すると、その投稿のカテゴリID・カテゴリ名・カテゴリスラッグなどの情報が配列で返されます。

    get_the_category()で取得できる情報オブジェクトの配列は以下の通りです。

    array(1) {
      [0]=>
      object(WP_Term)# (16) {
        ["term_id"]               =>//カテゴリID (int)
        ["name"]                  =>//カテゴリ名 (string)
        ["slug"]                  =>//カテゴリスラッグ (string)
        ["term_group"]            =>//カテゴリグループID (int)
        ["term_taxonomy_id"]      =>//タクソノミーID (int)
        ["taxonomy"]              =>//タクソノミー名"category" (string)
        ["description"]           =>//カテゴリの説明 (string) 
        ["parent"]                =>//親ID (int / array)
        ["count"]                 =>//投稿数 (int)
        ["filter"]                =>//フィルタ (string)
    
        ["cat_ID"]                =>//"term_id" と同じ
        ["category_count"]        =>//"count" と同じ
        ["category_description"]  =>//"description" と同じ
        ["cat_name"]              =>//"name" と同じ
        ["category_nicename"]     =>//"slug" と同じ
        ["category_parent"]       =>//"parent" と同じ
      }
    }

    カテゴリを設定している数に応じてWP_Termオブジェクトが配列に格納されています。上記はカテゴリが1つの場合ですが、カテゴリが2つであれば、array(2)となり、それぞれオブジェクトが入ります。

    また、カテゴリのアーカイブURLの取得は get_category_link() を使用します。

    例1 : カテゴリID, カテゴリ名, スラッグ, アーカイブURLを取得( 1つの場合/複数の場合 )

    <?php
    $categories = get_the_category();
    
    //カテゴリの1つ目だけ
    $cat_id   = $categories[0]->cat_ID;    //カテゴリID
    $cat_name = $categories[0]->name;      //カテゴリ名
    $cat_slug = $categories[0]->slug;      //カテゴリのスラッグ
    $cat_link = get_category_link($cat_id);   //アーカイブURL
    
    //設定されているカテゴリ全部( 1つでも )
    foreach ($categories as $cat):
      $cat_id   = $cat->term_id;           //カテゴリID
      $cat_name = $cat->name;              //カテゴリ名
      $cat_slug = $cat->slug;              //カテゴリのスラッグ
      $cat_link = get_category_link($cat_id); //アーカイブURL
    endforeach;
    
    ?>

    例2 : 複数のカテゴリ情報をアーカーブページへのリンク付きのリストで呼び出す。

    <?php
      $categories = get_the_category();
      if($categories):
        echo '<ul>';
    
        foreach($categories as $cat):
          $cat_name = $cat->name;
          $cat_link = get_tag_link($cat->term_id);
          echo '<li><a href="'.$cat_link.'">'.$cat_name.'</a></li>';
        endforeach;
    
        echo '</ul>';
      endif;
    ?>
    

    親情報を詳しく知りたい時は

    子カテゴリから親に関する情報はID しか取得できません。なので、このIDを利用してさらに情報を取得する必要があります。

    以下の記事でもまとめているような、get_category()という関数を使用することで、親情報も詳細に扱えるようになります。

    例 : 親情報をオブジェクトで取得( 親ID = $parent_id )

    $parent_category = get_category( $parent_id );

    これでget_the_category()と同様、配列で情報が返ってきますので、後の手順も同じです。

    ポイント:get_the_category()の引数に渡せるのは「投稿ID」、get_category()の引数に渡せるのは「カテゴリID」です

    タグ

    次はタグ情報についてまとめます。取得方法はカテゴリとほぼ同じで、使用する関数がタグ版のものに変わるだけです。

    the_tags()

    the_tags() は 投稿に設定されているタグ情報をリンク付きで出力してくれます。

    簡単に使える分、扱える情報は少ないです。

    the_tags( $before, $sep, $after );
    引数 説明
    $before タグ一覧の前に表示する文字列。
    初期値 : “Tags: “
    $sep 各タグリンクの間に表示する文字列・記号。
    初期値 : “,”
    $after 後のタグに続けて表示する文字列。
    初期値 : 空文字

    例 : タグを / で区切って表示させたあと、改行させる

    the_tags('タグ: ', '/', '<br>');

    get_the_tag_list()

    get_the_tag_list()the_tags()の取得版です。the_tags()と同じ引数で使用でき、出力はせずに取得できます。

    get_the_tag_list( $separator, $parents, $post_id );

    使い方はほぼ同じなので説明は省きます。

    「the_tags() = echo get_the_tag_list()」 です。

    get_the_tags()

    get_the_tags() は、投稿に設定されているタグに関する情報オブジェクトの配列を取得します。the_tags() よりも詳細な情報を扱いたい時や、出力の仕方をもっと自由にしたい場合は、この関数を使用します。

    get_the_tags( $post_id );

    get_the_tags() で取得できる情報は以下の通りです。

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

    get_the_category() とほぼ同じですが、タグには基本的に親がないので、get_the_tags()->parent必ず 0 を返すことに注意。

    また、タグのアーカイブURLの取得は get_tag_link() を使用します。

    例1 : タグID, タグ名, スラッグ, アーカイブURLを取得

    <?php
    $tags = get_the_tags();
    
    foreach ($tags as $tag):
      $tag_id   = $tag->term_id;          //タグID
      $tag_name = $tag->name;             //タグ名
      $tag_slug = $tag->slug;             //タグのスラッグ
      $tag_link = get_tag_link($tag_id);  //アーカイブURL
    endforeach;
    
    ?>

    例2 : 複数のタグ情報をアーカーブページへのリンク付きのリストで呼び出す。

    <?php
      $tags = get_the_tags();
      if($tags):
        echo '<ul>';
    
        foreach($tags as $tag):
          $tag_name = $tag->name;
          $tag_link = get_tag_link($tag->term_id);
          echo '<li><a href="'.$tag_link.'">'.$tag_name.'</a></li>';
        endforeach;
    
        echo '</ul>';
      endif;
    ?>
    

    (カスタム)タクソノミー

    残るはカスタムタクソノミーの取得についてですが、カテゴリもタグもカスタムタクソノミーも、全てタクソノミーですので、この章ではカスタムタクソノミーに限った話ではなく、カテゴリやタグも含めた、タクソノミー全般的な情報の扱いの話になります。

    基本知識

    カテゴリやタグは、タクソノミーの一種で、デフォルトで用意されているもの。「カスタムタクソノミー」はカテゴリ・タグの他に、自分で作成したタクソノミーのこと。

    つまり、この章でメモしていく関数はタクソノミーに関する情報を扱うものですので、カテゴリやタグの情報も扱えます。ここまででメモしてきたカテゴリ・タグ情報を取得する関数も、この章でメモしている関数を応用したものにすぎません。

    また、タクソノミーの値をタームと言います。

    「ダンスジャンル」というタクソノミーを作成したとして、その具体的なものとして選択する「ヒップホップ」や「ブレイク」、「ハウス」といったものがタームとなります。

    ということをまずは予備知識として置いておくと混乱しにくいかもしれないです。

    the_terms()

    the_terms() は投稿に設定されているタクソノミーのタームをリンク付きで出力してくれます。

    the_terms( $id, $taxonomy, $before, $sep, $after );
    引数 説明
    $id 投稿 ID
    初期値 : 0
    $taxonomy タクソノミースラッグ。
    初期値 : 空文字
    $before 先頭のタームの前に表示する文字列。
    初期値 : ‘, ‘
    $sep タームを区切る文字列。
    初期値 : 空文字
    $after 最後のタームに続けて表示する文字列。
    初期値 : 空文字

    カテゴリ・タグの時と少し違うのは、第二引数にタクソノミー名(slug)が必要なところです。これにより、どのタクソノミーに関する情報がを出力するかを指定できます。

    *$taxonomyに ‘category’ を指定すると設定されているカテゴリ情報を、$taxonomyに ‘post_tag’ を指定すると設定されているタグ情報を出力してくれます。

    例 : 「 / 」区切りでタグを出力

    the_terms( $post->ID, 'post_tag', 'タグ: ', ' / ' );

    get_the_term_list() – the_terms()の取得版

    get_the_term_list()the_terms()の取得版です。the_terms()と同じ引数で使用でき、出力はせずに取得できます。

    get_the_term_list( $separator, $parents, $post_id );

    使い方はほぼ同じなので説明は省きます。

    「the_terms() = echo get_the_term_list()」 です。

    get_the_terms()

    get_the_terms() は、投稿に設定されているタームに関する情報オブジェクトの配列を取得します。the_terms() よりも詳細な情報を扱いたい時や、出力の仕方をもっと自由にしたい場合は、この関数を使用します。

    get_the_terms( $id, $taxonomy );

    カテゴリやタグの時と違い、引数が2つあります。第一引数はこれまで通り投稿IDを指定し、第二引数にはタクソノミーのスラッグを指定します。

    get_the_terms() で取得できる情報は次の通りです。

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

    get_the_terms() と同じですね。

    また、タームのアーカイブURLの取得は get_term_link() を使用します。

    カテゴリやタグの時とは少し扱い方が異なりますので、少し詳しく説明します。

    get_term_link( $term, $taxonomy );

    このように、カテゴリやタグの時とは違って第二引数があり、タクソノミーのスラッグを指定する必要があります。また、第一引数はIDではなくオブジェクトでも指定可能になり、オブジェクトで指定する場合は第二引数を省略することができます。

    詳しくは以下の記事でまとめていますので、ぜひご覧ください。( get_category_link(), get_tag_link() についてもまとめています。)

    以下、get_the_terms()を使用した記述例になります。

    例1 : “example”という名前のタクソノミーに関するタームの、ID, 名前, スラッグ, アーカイブURLを取得

    <?php
    $terms = get_the_terms($post->ID, 'example');
    
    foreach ($terms as $term):
      $term_id   = $term->term_id;           //タームID
      $term_name = $term->name;              //ターム名
      $term_slug = $term->slug;              //タームのスラッグ
      $term_link = get_term_link($term_id);  //アーカイブURL
    endforeach;
    
    ?>

    例2:”example”という名前のタクソノミーに関するターム情報をリンク付きのリストで出力する。

    
    <?php
      $terms = get_the_terms($post->ID, 'example');
      if($terms):
        echo '<ul>';
    
        foreach($terms as $term):
          $term_name = $term->name;
          $term_link = get_tag_link( $term );    //$termはオブジェクトなので第二引数は省略可
          echo '<li><a href="'.$term_link.'">'.$term_name.'</a></li>';
        endforeach;
    
        echo '</ul>';
      endif;
    ?>
    

    $term_link を取得している「get_tag_link( $term );」の部分は、タクソノミーのスラッグである”example”を省略しています。

    第一引数にタームIDを指定する場合、「 get_tag_link( $term->term_id, ‘example’ ); 」となります。

    まとめ

    最後に、各情報の扱いで使用できる関数などを簡単にまとめておきます。

    基本情報

    • $post から取得
    • get_post() を使用する
    • the_title(), the_content()など
    • アイキャッチはthe_post_thumbnail()が使えるが、もっと便利な関数を自作できる(別記事)
    • 別ページへのリンクはget_permalink()

    固定ページ – 親ページ情報

    • 全親IDの取得はget_post_ancestors()
    • 親ページの各情報はIDとget_post()

    固定ページ – テンプレートファイル名

    • $template を使用する。
    • 最後のファイル名だけが欲しい場合は basename($template, ‘.php’) で取得

    カスタムフィールド

    • 全情報 get_post_custom()
    • 特定のキーを指定 get_post_meta()
    • ループ内限定 post_custom()

    投稿タイプ

    • スラッグの取得は get_post_type()
    • アーカイブURL get_post_type_archive_link()
    • スラッグを指定して各情報 get_post_type_object()

    カテゴリ

    • 形式ありの出力・取得は the_category() get_the_category_list()
    • より詳細を取得する時は get_the_category()
    • アーカイブURLの取得は get_category_link()

    タグ

    • 形式ありの出力・取得は the_tags() と get_the_tag_list()
    • より詳細を取得する時は get_the_tags()
    • アーカイブURLの取得は get_tag_link()

    タクソノミー

    • 形式ありの出力・取得は the_terms() と get_the_term_list()
    • より詳細を取得する時は get_the_terms()
    • アーカイブURLの取得は get_term_link()

    その他の情報

    サイト自体の情報

    home_url() や blog_info()などを用います。以下のページにてすでにまとめてありますので、是非参考にしてみてください。

    アーカイブページでの情報の取得

    これからまとめていく予定です。記事が公開されましたらここにもリンクを貼りたいと思います。

    - Thank you for reading this to the end. -

    コメントする

    CAPTCHA


    TOPへ Top