3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【WordPress】メインクエリとメインループ

Last updated at Posted at 2018-11-07

メインクエリとは

データベースから呼び出される記事データのこと
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がデータベースに対し、ページに応じた適切なクエリを行い、投稿を表示する準備を行う
⑷ テンプレートファイルのメインループ処理が開始される(アクションフックで表示件数を記述している分だけループされる)

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?