この記事は最後に更新してから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メソッドのキー |
---|---|---|
投稿ID | ID | ← |
投稿者ID | post_author | ← |
投稿日時 | post_date | ← |
投稿日時(GMT) | post_date_gmt | ← |
投稿内容 | post_content | ← |
タイトル | post_title | ← |
投稿内容の抜粋 | post_excerpt | ← |
投稿状態 | post_status | ← |
コメント投稿状態 | comment_status | ← |
トラックバック/ピンバック受付状態 | ping_status | ← |
パスワード | post_password | ← |
投稿名 | post_name | ← |
ping用URL | to_ping | ← |
pingされてきたURL | pinged | ← |
更新日時 | post_modified | ← |
更新日時(GMT) | post_modified_gmt | ← |
DB用フィールド | post_content_filtered | ← |
親投稿の投稿ID | post_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 );
最終更新 : 2018年05月27日 10:46
関連
お勧め
add_shortcode(2018年5月27日 更新)
get_user_setting(2022年1月31日 更新)
have_posts(2018年5月27日 更新)
in_category(2018年5月27日 更新)
add_feed(2024年6月24日 更新)