WordPressでサイト制作を必ず出会う言葉
メインクエリ・サブクエリ
今回の記事では、なんとなくの理解で使用しているメインクエリ・サブクエリについての理解を深めることを目的に記事執筆していきます。
メイン・クエリとサブクエリとは
メインクエリ・サブクエリを理解するために、まずはWordPressがどのような処理をどのような順番で行っているのかをみていきましょう!
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より引用)
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
の記事めっちゃ参考になりそうなので、置いておきます。
まとめ
メインクエリ・サブクエリ・フックなどよくわからない言葉だなぁっと思っていたんですが、
自分でまとめていくと理解できるようになりますね。
わたしが、崇拝しているアッキーさんの動画はめちゃくちゃ勉強になりますので
お時間あればみてみてください。
今回の記事は、ほぼほぼこちらの動画を参考にして執筆しました。
※YoutubeをQiitaに埋め込むのもちょっと手間でした。
こちらの記事を参考にしてみてください。
https://qiita.com/tnarihi/items/762b6ba4ac0a160eef5b