wordpressでデータベース検索数を減らす

基本的な内容ですがメモしておきます。

foreach($rooms as $room){
  $args_posts = array(
    'post_status' => array('publish'),
    'posts_per_page' => -1,
    'meta_query' => array(
      'key' => 'select_room',
      'value' => $room,
    )
  );

  $post_infos = get_posts($args_posts);

  foreach($post_infos as $post_info){
    setup_postdata($post_info);
    $post_id = $post_info->ID;
    $hoge = get_post_meta($post_id, 'hoge', true);
    $hoge_array[$room] = $hoge;
  }
}

以上のようなコードは、以下のように検索を一括で行うことで検索数を大分減らせます。

$hoge_array = array();

$args_posts = array(
  'post_status' => array('publish'),
  'posts_per_page' => -1,
  'meta_query' => array(
    'key' => 'rooms',
    'value' => $rooms,
    'compare' => 'IN'
  )
);

$post_infos = get_posts($args_posts);
foreach($post_infos as $post_info){
  setup_postdata($post_info);
  $post_id = $post_info->ID;
  $hoge = get_post_meta($post_id, 'hoge', true);
  $room = get_post_meta($post_id, 'room', true);
  $hoge_array[$room] = $hoge;
}

またget_postsした後のget_post_metaは検索をかけたことにならないため、カスタムフィールドを取得する際にはこの順で取得するのが一番よさそうです。