WP クエリの仕組み

$wp_query
グローバル変数。リクエストの情報を与えることで、データベースから情報を取得する。
リクエストというのは、大体はURLということだと思う。

WordPressのループの仕組みを深く知る query_posts() と get_posts() の違い


ーーー
query_posts と get_posts の違い

get_posts() は、データを取得するだけ。query_posts() は、グローバル変数 $wp_query を変更する。
使ったあとに、これで元に戻してあげる必要がある。
wp_reset_query();

ーーー

have_posts()
現在の WordPress クエリにループできる結果があるかどうかをチェックする。

new WP_Query()
これで、たぶん

$the_query = get_posts(
array( ‘category__and’ => $category_array_notempty, ‘numberposts’ => 20, ‘s’ => $search_str, ‘paged’ => $paged )
);

get_post にパラメータを私て、$the_queryを作る。
pagedはURLに含まれているので、何もしなくても取れる。

$the_query = new WP_Query( $args );

WP_Queryは、記事を取得するためのクラス。
get_postsはWP_Queryクラスを利用して記事を取得する。テンプレートタグ。
どちらもメインループには影響を与えない。

WP_Queryの場合
$args = array( ‘post_type’ => ‘post’ );
$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) : $the_query->the_post();
the_title();
endwhile;
wp_reset_postdata();

have_posts():投稿があることを確認する
the_post():$postの中身を書き換える。

$postを書き換えることで、the_title()などを使って投稿の情報を取り出すことができる。
$postはグローバル変数なので、書き換えた後でresetを忘れないように。
$postを書き換えるのは、投稿の情報を取得するための関数を共通化する(使い回す)ためなんだと思う。