• このエントリーをはてなブックマークに追加

メインクエリ

そのページに本来表示される内容。クエリ。
ページ送りに関係する処理。1ページ目、2ページ目の表示内容があるのが、本来のメインのクエリ。

サブクエリ

メインクエリとは別にページ送りを前提とあまり考えないページ。※できなくはないが、サブクエリは本来の使い方はそういったものではない。

pre_get_posts

query_postsと同じように利用できる。こちらは、テンプレートが読み込まれる前に処理されるため、ページ送り:このページは20件にしようとかそういった処理などに利用できる。

functions.phpで使うことが多い。

pre_get_postsは条件を変更するが、それを前提に動くため、動作がおかしくならない。query_postsはその関数のあとその条件下に変わるため、他の動作が異なるため、意図をわかっていないとおかしくなる。

pre_get_posts以外は処理の最後にクエリをもとに戻す関数を記述して処理しないといけないことを覚えておくこと。

query_posts

使わないほうが良い関数。

メインクエリを変更する関数ではあるが、リセットを忘れるとメインクエリが違ったままになるため、そのままget_postなどを行うと、意図しない(関数を初めて使ってつまずいた人)結果となってしまう。多くの記事にて、利用することをすすめないのは、意図せずに使ってしまってつまずくことが多い、pre_get_postsを使えばページ送りなどで特に大きな問題が起きないため。

こちらの関数のあとループ処理で表示などを行い、書き換えたメインクエリが必要なくなったら、以下の通り

wp_reset_query()

でクエリをそのページで本来表示される・利用されるクエリ内容にもとに戻す処理をかける。ちゃんとリセットしていて、ここでしか使わないよ。ってわかっていればいいと思う。ただ、代替の関数というか推奨される他の関数があるので、そちらを使ったほうが処理も早い。

WP_Query

サブクエリ専用といってもいい関数。

メインのクエリ(本来そのページで表示される内容)とは別に、他に違った条件で抽出して、違った結果を表示したい時に利用する。

WordPressの学習を始めたばかりの人からすると書き方が、メインループなどとは異なるため、困るわけだが、こちらの関数を使ったほうが良い。

オブジェクト形式で処理結果が返ってきて、

$queryXXX->have_posts();

のようになる。$queryXXXは任意で名前を変えて使ったほうが良い。

wp_reset_postdata();

上記の関数で最後リセットする。

get_posts

WP_Queryと同じように利用する。サブループ、サブクエリ用に利用する。

WP_Queryと同じく、リセットは必ずかける。

wp_reset_postdata();