この記事は最後に更新してから1年以上経過しています。

WP_Postオブジェクトで投稿情報を直感的に使う

説明

WordPress 3.5で登場するであろう WP_Postクラス。WordPressの投稿情報は、投稿情報本体のほか、カテゴリーや投稿タグ、カスタムフィールドなど、いくつかに分散して記録され、それぞれの情報を取得する際は、いくつかの関数をしていた。新しいWP_Postクラスにより、その習慣とおさらばできるかもしれない。

はじめにお断りを。この記事はWordPress 3.5 beta-1に基づいており、正式版の際に異なる可能性がある。この点はご理解いただきたい。

WP_Postクラスの使いことはそれほど意識する必要がない。例えば、 get_post関数にて取得形式がオブジェクト(デフォルト)の場合、WordPress 3.5の戻り値はWP_Postクラスになる。

$_post = get_post( 1 );

get_post関数の内部では、

$_post = WP_Post::get_instance( 1 );

といった感じで投稿IDが1の投稿情報が格納されたWP_Postオブジェクトが作成されている(3.5のget_post関数は投稿IDを直接指定できるように変更されている)。

カスタムフィールドにアクセス

こうして取得した$_post、タイトルや投稿内容といった生の投稿情報を参照する場合は、従来通り次のようにすればいい。

/* 投稿ID */
var_dump( $_post->ID );

/* 投稿タイトル */
var_dump( $_post->post_title );

/* 投稿内容 */
var_dump( $_post->post_content );

/* 投稿日時 */
var_dump( $_post->post_date );

/* 最終更新日時 */
var_dump( $_post->post_modified );

次はカスタムフィールド。通常は get_post_meta関数あたりで値を取得していると思うが、このWP_Postオブジェクトであれば、次のように指定できる。

/* カスタムフィールド名が'field1' */
var_dump( $_post->field1 );

/* カスタムフィールド名が'field-2' */
var_dump( $_post->__get( 'field-2' ) );

このように通常のカスタムフィールドは、標準の投稿情報と同じように取り扱うことができる。例外としては、カスタムフィールドの名前に'-'(ハイフン)が含まれるケース。本来であれば $_post->field-2 と指定したいところだが、PHPの仕様上、名前の一部ではなく、引き算の演算子になってしまう。そのため__getメソッド(通称ゲッター)を使用して、その値を取得しているわけである。WordPressの仕様では、カスタムフィールドの名前に'-'を含めることができるが、使わない方が無難だろう。

なお現状のbeta-1では、同じ名前のカスタムフィールドがあった場合、最初の1つだけを取得している。正式版の時にはそれぞれの値を配列で取得できるようになってほしいものだ。

カテゴリーと投稿タグ

カテゴリーと投稿タグについても同じような感じでアクセスできる。

/* カテゴリー */
var_dump( $_post->post_category );

/* 投稿タグ */
var_dump( $_post->tags_input );

取得できる値は、どちらも配列(投稿タグが設定されていない場合は空の配列)になる。それぞれの内容は、カテゴリーならカテゴリーID(term_id)、投稿タグならタグ名(スラッグではない)になる。どちらの内容も get_the_terms関数で取得した後に wp_list_pluck関数で値を絞り込んでいるのだが、get_the_terms関数で取得した内容をそのまま利用できるほうがうれしい気がする。

WP_Postオブジェクトにより、従来いくつかの関数を呼び出して取得していた値を名前を指定するだけでアクセスできるようになる。正式版として使用できるようになるまで、もう少しの辛抱だ。


最終更新 : 2012年10月04日 18:46


お勧め

get_next_image_link(2021年7月25日 更新)

string get_next_image_link( [ string | int[] $size = 'thumbnail' [ , string | false $text = false ] ] )
次の添付ファイルへのリンクを取得する。

wp_after_insert_post(2020年12月11日 更新)

void wp_after_insert_post( int | WP_Post $post, bool $update, WP_Post $post_before )
投稿情報を保存した後にアクションを実行する。

wp_save_post_revision(2024年1月10日 更新)

int | WP_Error | void wp_save_post_revision( int $post_id )
現状の投稿のリビジョンを作成する。

wp_debug_backtrace_summary(2012年6月15日 更新)

mixed wp_debug_backtrace_summary( [ string $ignore_class = null [ , int $skip_frames = 0 [ , bool $pretty = true ] ] ] )
デバッグ用の呼び出し情報を取得する。

nocache_headers(2018年5月27日 更新)

void nocache_headers( )
ブラウザのキャッシュを無効にするHTTPヘッダーを出力する。