LoginSignup
0
1

More than 3 years have passed since last update.

メインクエリとサブクエリで悩んでいるあなた(俺)へ捧ぐ

Last updated at Posted at 2020-11-04

WordPressでサイト制作を必ず出会う言葉

メインクエリ・サブクエリ

今回の記事では、なんとなくの理解で使用しているメインクエリ・サブクエリについての理解を深めることを目的に記事執筆していきます。

メイン・クエリとサブクエリとは

メインクエリ・サブクエリを理解するために、まずはWordPressがどのような処理をどのような順番で行っているのかをみていきましょう!
名称未設定のアートワーク.png

1.PCからURLによって表示させたいページのリクエストをサーバーに送る
2.URLを受けて、サーバーからデータベースへ必要なデータを検索する。
 (固定ページのURLなら、固定ページの情報を検索。記事一覧のURLなら記事の情報を検索)
→このリクエストのことをメインクエリと呼ぶ
3.必要なデータをデータベースから抽出してまとめたものを、$wp_query(必要なデータをまとめたオブジェクト)を生成。
$wp_queryには様々な投稿情報が入っている
4.PHPで処理して表示

メインクエリのカスタマイズ

サーバーからデータベースへ必要なデータを検索する際に、カスタマイズするときにどう行うかをみていきます。
例えば、投稿記事を5件のみ取得したいときや、特定のカテゴリーのみ取得したいときといったケースがあげられます。

結論として、フックを使用することで可能になります。
フックを作動させることで検索をかける前に
投稿記事を3件のみ取得したいとき
特定のカテゴリーのみ取得したい
といったことを叶えることができるようになります。

フックを使うときにはpre_get_postsを使用しましょう。
https://cleysense.com/blog/how-to-use-pre_get_posts/
の記事が非常に参考になりました。

query_postでも可能のようですが、非推奨なのでやめておきましょう!
https://www.sejuku.net/blog/67035

投稿記事を5件のみ取得したいときに書くコードです。(codexより引用)

functions.php
function five_posts_on_homepage( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', '5' );
    }
}
add_action( 'pre_get_posts', 'five_posts_on_homepage' );

サブクエリとは

メインクエリでは取得できなかった情報をリクエストします。
($wp_queryでは取得できなかったもの)

同じページに、「新着ニュース」「制作実績」を二つ表示したいときにどうするかを考えていきます。
新着ニュースをデフォルトの投稿タイプ・制作実績をカスタム投稿タイプで表示させるケースでいくと、
ニュースがメインクエリで取得表示であれば、実績をサブクエリで取得・表示するようにします。

そして、サブクエリを取得する際のサンプルコードがこちらになります。

<?php
$args = array(
 'post_type' => 'works',
);
$the_query = new WP_query($args);
?>

https://esample.info/wp/402
の記事めっちゃ参考になりそうなので、置いておきます。

まとめ

メインクエリ・サブクエリ・フックなどよくわからない言葉だなぁっと思っていたんですが、
自分でまとめていくと理解できるようになりますね。

わたしが、崇拝しているアッキーさんの動画はめちゃくちゃ勉強になりますので
お時間あればみてみてください。
今回の記事は、ほぼほぼこちらの動画を参考にして執筆しました。
IMAGE ALT TEXT HERE

※YoutubeをQiitaに埋め込むのもちょっと手間でした。
こちらの記事を参考にしてみてください。
https://qiita.com/tnarihi/items/762b6ba4ac0a160eef5b

0
1
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
0
1