WordPressで、特定の投稿のidからその投稿に紐づくカスタムフィールドを取得したいときがあります。
get_post_metaという関数は投稿のidとカスタムフィールド名を指定すると、その値を取得することの出来る便利な関数です。
ただ、一つのカスタムフィールドを取得するならデータベース検索は少なくて済みますが、復数の取得がさらにfor文の中に入っていたりするとデータベース検索数はどんどん増えていきます。
$post_infos = array(); foreach($post_ids as $post_id){ $post_info['ID'] = $post_id; $post_info['aaa'] = get_post_meta($post_id, 'aaa', true); $post_info['bbb'] = get_post_meta($post_id, 'bbb', true); $post_info['ccc'] = get_post_meta($post_id, 'ccc', true); $post_info['ddd'] = get_post_meta($post_id, 'ddd', true); $post_infos[] = $post_info; }
上のようなコードは、復数のget_post_metaをget_post_customにまとめてしまえば、検索数は一回に抑えることが出来ます。
下がその例です。
$post_infos = array(); foreach($post_ids as $post_id){ $post_info['ID'] = $post_id; $post_customfields = get_post_custom($post_id); $post_info['aaa'] = $post_customfields['aaa'][0]; $post_info['aaa'] = $post_customfields['bbb'][0]; $post_info['aaa'] = $post_customfields['ccc'][0]; $post_info['aaa'] = $post_customfields['ddd'][0]; $post_infos[] = $post_info; }
このように変更することで、一つの投稿における検索数を一回に抑えることができます。
また、$post_customfields[‘aaa’][0]というように最後に[0]がついているのは、get_post_customで取得した配列が下のような形式になっているからです。
$post_customfields = array( 'aaa' => array( '0'=> 'hogehoge' ), 'bbb' => array( '0'=> 'hogehoge' ), 'ccc' => array( '0'=> 'hogehoge' ), 'ddd' => array( '0'=> 'hogehoge' ) );