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は型を指定するものである。
今回は初めてだったので一種類の要素しか条件として与えられなかったが、色々と複合させることでかなり柔軟な検索ができそうである。