この記事は最後に更新してから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


お勧め

add_shortcode(2018年5月27日 更新)

void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。

get_user_setting(2022年1月31日 更新)

mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。

have_posts(2018年5月27日 更新)

bool have_posts( )
次の投稿データが存在するかを調べる。

in_category(2018年5月27日 更新)

bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。

add_feed(2024年6月24日 更新)

string add_feed( string $feedname, callable $callback )
フィードを追加する。