投稿ページの情報取得

投稿ページの情報取得
Image by Sergey Nemo from Pixabay

2020.11.22(更新日:2020.12.11)

似たような関数名があったりして何回も調べたり、今更ながら「こんなの知らんかった!」となることも多いwordpress。
投稿ページは「投稿ID」さえわかれば何とかなる。今回は基本的な情報取得をまとめ。
より良く忘れる投稿ページのカテゴリ系の情報はまた別途書く予定。

この記事は1年以上経過しています。内容的に古い場合があります。

現在の投稿のID(数値)を取得

$post_id = get_the_ID();

ループ内で使用出来る…となっているが、$post(グローバル変数)を書き換えてない場合に限り、該当のページ内でループ外でも投稿IDを取得出来る。
個人的にはグローバル変数はあまり好きではないので滅多に使わないが、以下でも取得可。

global $post;
$post_id = $post->ID;
//もしくは
global $wp_query;
$post_id = $wp_query->get_queried_object_id();

スラッグ名から投稿のID(数値)を取得

$post_id = get_posts( 'スラッグ名' );
$post_id = $post_id[0]->ID;
//もしくは
$post_id = get_page_by_path( 'スラッグ名', 'OBJECT', '投稿タイプ' );
$post_id = $post_id->ID;

投稿ページはであまりやらないけれど一応。もちろんループ外でOK。

投稿タイトル取得

ループ内で使用し即出力(表示)

the_title();

the_titleは第1引数にタイトル前に、第2引数にタイトル後に置くテキストを入れられる。第3引数をfalseでPHPで使用できる値を取得出来る。

ループ内で使用しPHPで使用できる値として取得

$post_title = get_the_title();

ループ外の場合は投稿IDを引数に

$post_title = get_the_title( $post_id );

single_post_titleなんていうのもある。ループ外で使用出来る。

single_post_title( $prefix, $display ); 

$prefixは記事タイトルの前に出力するテキスト。$displayをfalseでPHPの値として取得。引数を空にするとそのまま表示。
またimgタグのaltにタイトルを入れる際に使えそうなこんなのも。

the_title_attribute( $args );
$args = array(
  'before' => '', //タイトルの前に表示するテキスト
  'after' => '', //タイトルの後に表示するテキスト
  'echo' => '', //falseでPHPの値で返す
  'post' => '' //投稿ID。空の場合現在の投稿・・・ってことはループ内で使用
};

便利そうだけれどesc_attrでタイトルを返した方がわかりやすい気がする。

投稿の本文取得

ループ内で使用し即出力(表示)

the_content();

ループ内で使用しPHPで使用できる値として取得

$post_content = get_the_content();

ループ外でも(該当ページ外でも)投稿のIDでPHPから使用できる値として取得

残念ならが get_the_content( $post_id ) とはならない。少々面倒くさい。

$post_content = apply_filters('the_content', get_post_field( 'post_content', $post_id ));

どの投稿記事なのか$post_id(投稿ID)を指定してget_post_fieldで投稿情報の要素を取得する。他の様々な情報も取得できる。the_contentと同等にしたければフィルターを通し返す。

抜粋取得

投稿記事編集ページにあるカスタムフィールド「抜粋」。

ループ内で使用し即出力(表示)

the_excerpt();

上記を使用して表示した文字は文字数の制限(110字)がある。また抜粋のカスタムフィールドが空の場合、本文の頭から110文字を抜粋して表示してくれる。日本語の場合この文字数が意図しない結果になるのでWP Multibyte Patchをインストール推奨。

ループ内で使用しPHPで使用できる値として取得

$excerpt = get_the_excerpt();

ループ外でも(該当ページ外でも)投稿のIDからPHPで使用できる値として取得

$excerpt = apply_filters( 'the_excerpt', get_post_field( 'post_excerpt', $post_id ) );

どの投稿記事なのか$post_id(投稿ID)を指定してget_post_fieldで投稿情報の要素を取得する。the_contentと同じ。the_excerptと同等にしたければフィルターを通し返す。