いちばんベーシックなもの
WordPressではメインクエリーのデフォルトとして、表示件数、並び順、投稿タイプとカテゴリーが設定されている。したがって、次の記述では、デフォルト設定で生成されたクエリー・ストリング(URLのドメインより後の部分)に基づいてデータベースから取得した投稿データを表示することになる。つまり、
- デフォルト設定に基づくクエリーストリングの生成
- 条件分岐タグの設定
- データベースから投稿を取得
- 使用するテンプレートの読み込み
- テンプレートに記載されたタグ(次のコード)に基づいて表示
<?php
if (have_posts()): //投稿はあるかい?
while (have_posts()): //投稿がある間は繰り返してね。
the_post(); //テンプレートタグを有効化する
the_title(); //テンプレートタグ
the_content(); //テンプレートタグ
endwhile;
endif;
?>
違う並び順にしたい!~メインクエリーのデフォルト設定を変更する~
表示件数を減らしたい、並び順を逆にしたいという場合は、メインクエリーのデフォルト設定を変更することになる。そんな時に使われてきたのがquery_posts。query_postsはテンプレートに記載されているので、WordPressの動きとしては以下のような流れになる。
- デフォルト設定に基づくクエリーストリングの生成
- 条件分岐タグの設定
- データベースから投稿を取得
- 使用するテンプレートの読み込み
- query_postsで投稿を再取得
- query_postsの指定に基づくクエリーストリングの生成
- 条件分岐タグの設定
- データベースから投稿を再取得
- テンプレートに記載されたタグ(次のコード)に基づいて表示
※ちなみに、query_postsを使うとデータベースから投稿を再取得するときに、デフォルト設定で取得したデータを上書きしてしまう。しかしwp_reset_query()でリセットすればquery_posts以前のデータにもどすことができる。
といっても、query_postsがメインクエリーのデフォルト設定を変更するものであることをわかっていなかったり、リセットし忘れたりすると意図しない動作が起こったりしてややこしい。そこで、メインクエリーのデフォルト設定を変更したい場合はpre_get_postsを使おうや。というのが2013年ごろの話。
サブクエリーには、条件分岐タグが書き換わらないget_postsを使うことで無用の混乱を予防しようと。
・・・この記事は勉強中につきまだ途中。