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

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

関連

  • WP_Post - 投稿情報クラス
  • get_post - 投稿情報を取得する
  • get_post_ancestors - 先祖の投稿IDを取得する
  • get_post_meta - カスタムフィールド情報を取得する
  • get_the_terms - 投稿記事のタクソノミー情報を取得する
  • wp_list_pluck - 配列内のオブジェクトまたは連想配列から特定の値だけを抽出する

お勧めコンテンツ

get_comments(2010年11月18日 登録)

array get_comments( [ mixed $args = '' ] )
コメント情報を取得する。

wp_get_post_tags(2011年6月2日 登録)

mixed wp_get_post_tags( [ int $post_id = 0 [ , array $args = array() ] ] )
投稿記事の投稿タグ情報を取得する。

get_template_part(2010年6月7日 登録)

void get_template_part( string $slug [ , string $name = null ] )
任意のテンプレートファイルを読み込む(表示する)。

update_option(2010年7月5日 登録)

bool update_option( string $option, mixed $newvalue [, mixed $autoload = null ] )
サイトオプションの値を更新する。

wp_remote_post(2013年6月27日 登録)

mixed wp_remote_post( string $url [ , array $args = array() ] )
POSTメソッドを送信する。

最終更新日時 : 2012-10-04 18:46