get_postsのかわりにwordpressのsqlを用いる

get_postsはWordpressに備わっている関数を用いて条件に合致する記事を取得するものであるが、複数のループで処理をするため記事の件数が多い状態で検索をかけると処理に時間がかかってしまう。
そこで、データベースから直接記事を取り出す方法をまとめる。

    global $wpdb;
    $sql = $wpdb->prepare("
      SELECT ID as room_id, lm1.meta_value AS value1
      FROM $wpdb->posts
      LEFT JOIN $wpdb->postmeta AS lm1 ON (ID = lm1.post_id AND lm1.meta_key = 'select_building')
      WHERE post_type = 'rooms'
      AND lm1.meta_value = %s
      ",$post_id);

    $results = $wpdb->get_results($sql, ARRAY_A);

SELECTは取り出したい要素を指定する。value1のように定義することもできる。
%d, %sのように外部の変数を用いた場合はその順番に変数を列挙する(Cのprintf関数のようなもの)。
get_resultによって要素が取得できる。ARRAY_Aは型を指定するものである。
今回は初めてだったので一種類の要素しか条件として与えられなかったが、色々と複合させることでかなり柔軟な検索ができそうである。