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_users(2012年10月18日 登録)

array get_users( [ array $args = array() ] )
ユーザー情報を取得する。

update_comment_meta(2014年3月9日 登録)

bool update_comment_meta( int $comment_id, string $meta_key, mixed $meta_value [ , mixed $prev_value = '' ] )
コメントメタ情報の値を更新する。

wp_get_image_editor(2012年12月20日 登録)

mixed wp_get_image_editor( string $path [ , array $args = array() ] )
イメージエディタ(WP_Image_Editorクラス)のオブジェクトを取得する。

get_header_textcolor(2012年8月24日 登録)

string get_header_textcolor()
カスタムヘッダーのテキスト色を取得する。

wp_trash_post(2012年9月13日 登録)

mixed wp_trash_post( [ int $post_id = 0 ] )
投稿情報をゴミ箱に入れる。

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