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

投稿情報を連想配列で参照する

説明

投稿情報は、タイトルや本文、投稿日時といったいくつかのデータが含んでおり、多くの場合オブジェクトになっている。これを連想配列で扱いたい場合はキャストして型変換することが多かった。基本的にはキャストで問題ないのだが、ふと目に留まったto_arrayメソッドが興味深かったのでメモとして残しておく。

3.5.0前後で様変わり

本編に入る前に、お断りというか注意点を。WordPressの投稿情報はバージョンによって変わってきており、元々は標準クラス(stdClass)のオブジェクトだったが、3.5.0以降はWP_Postクラスに変更され、今回取り上げているto_arrayメソッドはWP_Postクラスのもにになる。つまり3.5.0より前のバージョンでは今回取り上げているto_arrayメソッドは使用できないので、それを踏まえて読み進めてほしい。

まずは、次の表を見てほしい。これはWordPress 4.0.0において投稿情報を単純にキャストした内容とto_arrayメソッドで得られる連想配列のキーを示したものである。

内容arrayキャスト時のキーto_arrayメソッドのキー
投稿IDID
投稿者IDpost_author
投稿日時post_date
投稿日時(GMT)post_date_gmt
投稿内容post_content
タイトルpost_title
投稿内容の抜粋post_excerpt
投稿状態post_status
コメント投稿状態comment_status
トラックバック/ピンバック受付状態ping_status
パスワードpost_password
投稿名post_name
ping用URLto_ping
pingされてきたURLpinged
更新日時post_modified
更新日時(GMT)post_modified_gmt
DB用フィールドpost_content_filtered
親投稿の投稿IDpost_parent
ユニーク識別子guid
メニュー番号menu_order
投稿タイプpost_type
添付ファイルのMIMEタイプpost_mime_type
コメント数comment_count
フィルター名filter
先祖の投稿IDリストancestors
テンプレート名(固定ページのみ)page_template
カテゴリーIDリストpost_category
投稿タグIDリストtags_input

arrayキャストとto_arrayメソッドで得られる連想配列の違いは、表下側の4要素(page_templateは投稿タイプが固定ページのみ)である。to_arrayメソッドで拡張される4要素について、データの例や関連する関数を交えて順番に見ていこう。

to_arrayメソッドのキー関連する関数値の例
page(固定ページ)post(投稿)
ancestors get_post_ancestors{ [0] => 142, [1] => 86 }{}
page_template get_post_meta get_page_template_slug'default'
post_category get_the_terms{}{ [4] => 4 }
tags_input get_the_terms{}{ [3] => 'タグ1', [10] => 'タグ2' }

まずはancestors。親の投稿ID、さらにその親投稿があればその投稿IDが格納されている。上記の例だとキー0が親記事の投稿ID、キー1が親の親記事のIDとなる。なおこのancestorsは、3.5.0より前のバージョンでは投稿情報(stdClass)オブジェクトには含まれていたが、3.5.0以降の投稿情報(WP_Post)オブジェクトには含まれておらず、結果としてarrayでキャストした連想配列にも含まれていない。

page_templateには、カスタムフィールドに保存されている固定ページのテンプレート名になる。デフォルトテンプレート(page.php)の場合は'default'、テーマ内の個別のテンプレートファイルが設定されている場合はそのファイル名となる。なおget_page_template_slug関数の場合は、'default'は''に置き換えられるてしまうので、その点は注意したい。

post_categoryには、その投稿情報のカテゴリーIDが格納された配列となる。キーとその値のどちらもカテゴリーIDになるため、最初のカテゴリーIDをはキー0では参照できない。別途カテゴリー情報を取得して使う感じなんでしょう。

最後のtags_inputは投稿タグの配列で、キーは投稿タグID、その値は投稿タグ名(スラッグではない)になっている。こちらは使いやすそうですね。

__getメソッドで個別に取得できる

なお、これらの4要素については、__getメソッドで個別に取得できる。

$ancestors = $post->__get( 'ancestors' );
$page_template = $post->__get( 'page_template' );
$post_category = $post->__get( 'post_category' );
$tags_input = $post->__get( 'tags_input' );

ちなみに、__getメソッドで上記以外のキー名を指定すると、カスタムフィールドの値を取得することができる。

$value = $post->__get( 'keyname' );

/* 以下と同等 */
$value = get_post_meta( $post->ID, 'keyname', true );
get_post_meta関数の第3パラメータがtrueになるため、同じキー名で複数の値を登録している場合は1つの値しか取得できないことになるが、これはこれで便利だろう。

最終更新 : 2018年05月27日 10: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 )
フィードを追加する。