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

説明

投稿情報は、タイトルや本文、投稿日時といったいくつかのデータが含んでおり、多くの場合オブジェクトになっている。これを連想配列で扱いたい場合はキャストして型変換することが多かった。基本的にはキャストで問題ないのだが、ふと目に留まった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


お勧め

get_the_posts_navigation(2018年5月27日 更新)

string get_the_posts_navigation( [ array $args = array() ] )
アーカイブページ向けのナビゲーションを取得する。

is_child_theme(2011年9月28日 更新)

bool is_child_theme( )
現在のテーマが子テーマか調べる。

get_user_option(2012年9月16日 更新)

mixed get_user_option( string $option [ , int $user = 0 [ , mixed $deprecated = '' ] ] )
ユーザオプション(プロフィール)情報を取得する。

get_userdata(2018年5月27日 更新)

mixed get_userdata( int $user_id )
ユーザIDを指定し、マッチするユーザ情報を取得する。

wp_spam_comment(2013年9月6日 更新)

bool wp_spam_comment( $comment_id )
コメントをスパムにする。