【WordPress】ループ内で投稿に関する情報を取得する

Image

ループ内で記事情報を取得する場合、テンプレートタグを利用するか、オブジェクトから情報を取得する方法があります。今回はテンプレートタグと、WP_Queryから取得した投稿情報で、ループ内でよく利用する投稿情報の取得方法をご紹介したいと思います!

WP_Queryで記事情報を取得する方法のおさらい

WP_Queryは条件を指定して投稿情報をオブジェクトで返してくれるクラスです。取り出したい情報を細かく指定することができ、必要な記事情報を取得することができるため、多くの場面で利用されています。一例ですが、WP_Queryは下記のように記述します。

<?php
//条件指定
$args = array(
  'post_type' => 'post_type',
  'post_status' => array('publish'),
  'order'=>'desc',
  'orderby'=>'post_date',
  'posts_per_page' => '10'
);

//インスタンス化
$query = new WP_Query($args);

//ループ
if($query->have_posts()){
  while($query->have_posts()){
    //次の記事へ進む
    $query->the_post();

    //==============================
    // ループ内の処理を記述
    //==============================

  }
}else{
  //投稿がない場合の処理
}
wp_reset_postdata();
?>

上記の例では、$argsの変数に取得したい記事の条件を指定して、その条件をWP_Queryに渡し、返り値を$queryという変数で受け取っています。後はいつも記述するループの要領で$queryから情報を出力していきます。

WP_Queryは非常に多くの情報を返してくれますが、今回はpostに着目してみます。postには一つの投稿に関する情報が格納されています。それをループして、一つ一つ取り出し、一覧として出力します。var_dumpやprint_rで$queryの中身を見てみると、postは下記の情報を持っていることがわかります。

ID 投稿ID
post_author 投稿者ユーザID
post_date 投稿日時
post_date_gmt 投稿日時(グリニッジ標準時)
post_content 投稿本文
post_title 投稿タイトル
post_excerpt 投稿抜粋
post_status 公開状態
comment_status コメント受付状態
ping_status ピンバック、トラックバック受付状態
post_password 投稿閲覧パスワード
post_name スラッグ
to_ping ピン通知URL
pinged ピン通知済URL
post_modified 投稿更新日時
post_modified_gmt 投稿更新日時(グリニッジ標準時)
post_content_filtered
post_parent 投稿親ID
guid 投稿識別子(URL形式)
menu_order 固定ページ表示順序
post_type 投稿タイプ
post_mime_type 添付ファイル種類
comment_count 投稿コメント数
filter

上記の表をざっと見てみると、一覧を出力する上で必要な情報はほとんど持っていることがわかりますね!パーマリンクやアイキャッチ画像等の情報はないですが、足りない部分はテンプレートタグでカバーできますので、無問題です。

では本題に戻りまして、ループ内で頻繁に利用する値の取得方法を一つ一つ見ていきましょう!

IDを取得する

IDというのは投稿に割り当てられた一意の数値になります。管理画面で任意の投稿を開いてURLを確認すると、post=○○○○というパラメータがあります。こちらの数値が記事IDと呼ばれるもので、その投稿だけが持つ値となります。IDを指定することでどこからでもその投稿を呼び出したりすることができるので、確認方法を覚えておくと役に立つかもしれません!

テンプレートタグ

下記はテンプレートタグでIDを取得する方法です。

get_the_ID();

WP_Query

下記はWP_Queryで取得した情報からIDを取得する方法になります。

$query->post->ID;

投稿者名を取得する

投稿者名というのは、投稿を執筆したユーザーの名前となります。

テンプレートタグ

下記はテンプレートタグで投稿者名を取得する方法です。

get_the_author();

WP_Query

WP_Queryのpostには投稿者名の情報はないため、get_userdataを利用して、ユーザIDからユーザ情報をすべて取得して姓と名を結合します。

$userdata = get_userdata($query->post->post_author);
$userdata->last_name . $userdata->first_name;

ステータスを取得する

投稿の公開状態を取得します。

テンプレートタグ

下記はテンプレートタグのget_post_statusを利用して取得しています。

get_post_status();

WP_Query

下記はWP_Queryで取得した情報から公開状態を取得する方法になります。

$query->post->post_status;

スラッグを取得する

投稿のスラッグは下記のように取得します。

$query->post->post_name;

タイトルを取得する

タイトルは投稿につけたタイトルになります。管理画面では基本的に一番上に入力欄が設けられています。

テンプレートタグ

get_the_title();

WP_Query

$query->post->post_title;

本文を取得する

投稿に入力した本文をすべて取得します。

テンプレートタグ

the_content();

WP_Query

$query->post->post_content;

投稿タイプを取得する

投稿タイプはpostやpage、カスタム投稿の場合はカスタム投稿のpost_typeとなります。

テンプレートタグ

get_post_type();

WP_Query

$query->post->post_type;

パーマリンクを取得する

パーマリンクは投稿のURLです。パーマリンクは「設定」の「パーマリンク設定」にて設定した値となります。

get_permalink();

アイキャッチ画像を取得する

下記では諸々必要なタグを含めた値が出力されます。

the_post_thumbnail();

アイキャッチ画像のURLを取得する

アイキャッチ画像のURLだけを取得したい場合はこちらの方法が有用です。

wp_get_attachment_url(get_post_thumbnail_id());

投稿日を取得する

投稿した日を取得します。日付のフォーマットは「設定」の「一般設定」にて設定している日付フォーマットとなります。

get_the_date();

投稿日のフォーマットを指定してを取得する

ループ内限定で日付フォーマットを変更されたい場合は下記のようにフォーマットを指定してあげると、良い感じの値が取得できます。

get_the_date('Y/n/j');

タクソノミーのターム情報を取得する

こちらはカスタム投稿のタクソノミーを指定して、タームの情報を取得する方法です。下記ではタームの名前とスラッグを取得しています。

$terms = get_the_terms($query->post->ID, 'taxonomy');
foreach($terms as $term){
  echo $term_slug = $term->slug;
  echo $term_name = $term->name;
}

他にも取得できる情報は多くありますが、今回はよく使う値の取得方法をご紹介しました!今後Wordpressを構築する中で便利そうな内容であれば追加して共有できればと思います!

以上、Wordpressのループ内で投稿に関する情報を取得する方法のご紹介でした!