メインループとサブループ
WordPressでは投稿などのコンテンツは通常データベースに収められています。
それをURLから判断して抽出し表示しています。この抽出して表示させる条件をメインクエリと言います。
メインクエリにより抽出されたコンテンツは複数存在する場合がありますので、繰り返し処理(ループ)により表示させる必要があります。
この繰り返し処理をメインループと呼びます。メインループの基本的な書き方は以下のようになります。
メインクエリによりメインループ
<?php if (have_posts()) : while (have_posts()) : the_post(); ?> <?php the_title(); ?> <?php the_content(); ?> <?php endwhile; endif; ?>
have_posts()で処理すべきコンテンツがあるかを調べて、the_post()でテンプレートタグで情報が抽出できるようにします。今回使っているテンプレートタグはthe_title()でコンテンツのタイトル、そしてthe_content()でコンテンツの本文を表示します。
テンプレートタグには他にもたくさんありますので下記を参考にしてください。
テンプレートタグ – WordPress Codex 日本語版
メインループはアクセスされたURLから表示条件を決定していますので、例えばサイトのトップページに新着情報を表示させたい場合などには記事を抽出することができません。
そのような時はメインクエリとは別の表示条件で記事を抽出するサブクエリを利用します。サブクエリによって抽出された記事の繰り返し処理はサブループと呼びます。
サブクエリによるサブループ
<?php query_posts(array('post_type' => 'post', 'cat' => 1, 'posts_per_page' => 4 )); <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <?php the_title(); ?> <?php the_content(); ?> <?php endwhile; endif; ?> <?php wp_reset_query(); ?>
最初と最後の行以外はメインループと同じです。違うのは最初と最後の行です。
最初の行はテンプレートタグのquery_posts()を使ってメインクエリとは違うサブクエリを設定します。抽出条件はパラメータに記述します。今回は‘post_type’ => ‘post’で投稿を対象にして、‘cat’ => 1でカテゴリーIDが1の記事、‘posts_per_page’ => 4で最新の4件を表示するように設定しています。
そして、最後の行はサブクエリをwp_reset_query()を記述してリセットしています。この記述を忘れるともちろん不具合が起きますので注意しましょう。