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 - 配列内のオブジェクトまたは連想配列から特定の値だけを抽出する

お勧めコンテンツ

is_trackback(2011年10月31日 登録)

bool is_trackback( )
トラックバックエンドポイントリクエストなのか調べる。

form_option(2014年1月30日 登録)

void form_option( string $option )
オプションの値をフォーム要素向けに表示する。

esc_html(2010年6月17日 登録)

string esc_html( string $text )
テキスト内のHTMLタグをエスケープする。具体的には、パラメータ$textの中に含まれている特殊文字をHTMLエンティティに変換したテキストを取得する。

edit_term_link(2015年6月24日 登録)

string edit_term_link( [ string $link = '' [ , string $before = '' [ , string $after = '' [ , object $term = null [ , bool $echo = true ] ] ] ] ] )
タームの編集リンクを表示または取得する。

delete_term_meta(2016年2月23日 登録)

bool delete_term_meta( int $term_id, string $meta_key [ , mixed $meta_value = '' ] )
タームのメタ情報を削除する。

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