【WordPressの動き方シリーズ】(2)メインクエリとサブクエリの概要

メインクエリの概要

【WordPressの動き方シリーズ】(1)WordPressで作ったサイトへのアクセスから出力までの概要 | WordPressのプラグインを作ろう で書きましたが、WordPressはURLを元に自動的に必要なデータを集める機能があります。

この時のデータをメインクエリと呼び、そのデータはWP_Queryクラスのインスタンスとして$wp_queryというグローバル変数に保存されます。(実際には$GLOBALS['wp_query’]という形でスーパーグローバル変数に保存されます。)

この$wp_queryを使用し、テンプレートファイルなどでデータを整形し出力することになります。

サブクエリの概要

一方で、この$wp_queryを使用せず、独自にデータベースからデータを集めてテンプレートなどに出力することができます。このWP_Queryのクラスを使用して「独自に集めた」データをサブクエリと呼びます

例えば、メイン記事の下に関連記事を表示させたり、サイドバーに人気記事TOP3を集めて表示させたりする時は、サブクエリを使ってデータを集めて表示させることになります。

一方で、例えば「特定の固定ページで、固定ページそのもののコンテンツではなくブログ記事の一覧を表示させたい時」など、メインクエリを完全に無視してサブクエリのデータを利用してメインのデータを表示させることもできます。


このカスタマイズによりWordPressの自由度はかなり上がることになりますが、サブクエリを頻発するとデータベースの仕事量を増やすことにもなります。メインクエリのデータをテンプレート上での表示に使用しなかったとしても、WordPressは自動的にメインクエリを作り出してしまうからです。

なので、各ページで独自のデータをメインのデータとして出力したいときも、できるだけ「メインクエリ」をカスタマイズしてデータを集めた方が効率が良くなることになります。

メインクエリのカスタマイズにおける注意点

「WordPressはアクセスされたURLに応じてメインクエリを作成する’という話をしましたが、これはWordPressの表側のURLだけではなく、管理画面のURLにも当てはまります

そのため、メインクエリをカスタマイズをする際、「管理画面」なのか「表側」なのか、「表側」でもカスタマイズを行うのはどのようなページなのかを指定してカスタマイズしないと、意図しない部分でもそのカスタマイズが働いてしまう事になるため注意が必要となります。

一方、サブクエリは「その場1回限り」のクエリのためそのような指定は必要ない事になります。