メインクエリとは
データベースから呼び出される記事データのこと
WPはデフォルトで、ユーザがリンクをクリックしてページを表示する際に記事を取得する条件(メインクエリ)を決めて、DBから記事データを取得してくるところまでを自動で行ってくれる。
メインループとは
メインクエリをテンプレートファイル内で表示するループのこと
<?php if (have_posts()): ?>
<?php while (have_posts()): the_post(); ?>
...
<?php endwhile; ?>
<?php endif; ?>
上記のような記述に、**「このアーカイブページではX件、こっちではXX件記事を表示させたい」といった処理を加えるにはどうすれば良いか調べたところ、query_postsを使えば解決できると多くの記事で見かけた。
だが、先輩に聞いてみたところ、「query_postsを使う方法はよくない」とのこと、、
何がよくないかと言うと、
「メインクエリを書き換える際に再度データベースを読み込む必要があるのでページの表示速度が遅くなる懸念などがあるのでよくない」らしい。
そこで登場するのが「フック」**と呼ばれる記法。
フックとは
フックを記述すれば、「メインクエリを書き換える」ことができる。
「メインクエリを書き換える」という点についてはquery_postsと同じだが、add_action( 'pre_get_posts', 'five_posts' );といったアクションフックと呼ばれる記述をすればイベントが発生したときに機能を追加したり削除したりできる。
上記の理由からアクションフックでメインクエリを書き換えると無駄なクエリを読み込まなくて済むので推奨されているらしい。
だとすればあとは、フックの記述方法と記述場所がわかれば、解決!!
↓ 続きは参考URL ↓
https://thewppress.com/libraries/alters-query-conditions-in-a-right-way/
フックを使用した場合の記事新着一覧表示ロジック
⑴ ユーザがリンクをクリックしてページを表示する
⑵ アクションフック(ここでメインクエリを書き換える)
⑶ WordPressがデータベースに対し、ページに応じた適切なクエリを行い、投稿を表示する準備を行う
⑷ テンプレートファイルのメインループ処理が開始される(アクションフックで表示件数を記述している分だけループされる)