1. HOME
  2. wordpress
  3. メインループとサブループの違いについて

メインループとサブループの違いについて

メインクエリについて

メインクエリの話をする前にどうやって私たちはインターネットにアクセスするだけでウェブサイトがみれているかというところから。

まずは、サイト閲覧者(クライアント)のPC・ブラウザがURLによって表示したいページのリクエストを送ります。
そうすると、Webサーバーでファイルが読み込まれ、リクエストを受けたURLで表示する内容をデータベース(DB)に問い合わせます。

データベースから記事データを受け取ったら、どのテンプレートテーマファイルを使って表示させるかを決定する。
選択されたテンプレートファイルを読み込んでページが表示される。

という流れです。

データベースから呼び出される記事データがメインクエリ
そのデータをテンプレートファイル内で表示するループがメインループになる。

メインループの作り方

PHP

メインループの作り方はわかったけど、どうしてこれを記載するだけでそのページに応じたループを作ることができるのでしょうか。
カテゴリーページではそのカテゴリーに属しただけを取ってこれるのはどうしてか。

それは、ページによってクエリが変化するからです。
トップページの場合
→【設定】→【表示設定】の状況に合わせた記事の情報でループを作る。

個別ページの場合
→表示している記事だけの情報のみを表示します(ループは1回だけ)

カテゴリーページの場合
表示しているカテゴリーに属する記事の情報でループを作る。

*余談
single.phpとpage.phpは1つだけのページだから、ループを書く必要ない。
冒頭に、”the_post();”を書けば良いという意見もあるけれど、WordPressだと非推奨らしい。

WordPressでは、URLノパラメータに従ってデータベースにデータを取得しにいき、取得したデータは$wp_queryに保存される。この$wp_queryからデータを取り出して、表示させるのがループのコードの役割。

have_posts()は、$wp_queryに表示するべきデータが存在するかどうかを確かめる関数。
whileの繰り返し条件として、have_posts()を指定することで、”表示すべきデータが存在する間は処理を続ける”という条件を設定している。

the:post()は$wp_queryから順にデータを取り出していく関数。$wp_queryには複数の投稿データが格納されているけど、投稿データ1件分を$postへ格納して、$wp_queryの次のデータへ進む。

サブループについて

メインループ以外の部分で投稿データを処理するために作成されるループがサブループ。

サブループの作成で主に使われるものは2つ。WP_Queryget_posts()がある。
WP_Queryとget_posts()の違いは、配列で渡されるか、オブジェクトとして扱われるか。

他のカテゴリーの記事をみる