WordPressのメインループとサブループについて簡単に嚙み砕いてみた
2020.03.06
みなさま、こんにちは。
WordPressでテーマ作成をしている際に、よく「メインループ」「サブループ」という言葉を目にしますよね。
この言葉の意味が分からずに、Wordpressに苦手意識を持っている人は多いのではないでしょうか。
しかし特別難しいことではありません。
基本的に形で覚えてしまえば問題ありません。
代表的な形と簡単な概要を書いていきますので参考にしてみてください。
まず最初に基本的なところを
「メインループ」、「サブループ」を理解しやすくするために、まずはWordpressでページが表示される仕組みについて説明します。
WordPressで記事が表示される仕組み
- ユーザーがWordpressに表示したいページURLをリクエストする。
- WordPressがリクエストを受け、データベースに問い合わせをする。
- データベースからデータが送られてくる。
- WordPressがデータのテンプレートを判断し、表示する。
- ユーザーが記事を確認できるようになる。
この手順で呼び出されたデータをメインクエリと呼び、それを表示することをメインループと呼びます。
メインループ
前述した手順で呼び出したメインクエリを表示する(メインループ)するためのソースはこのように記述してください。
1 2 3 4 5 6 7 |
<?php if (have_posts()): ?> <?php while (have_posts()) : the_post(); ?> <!-- ここにループ内容 --> <?php endwhile; ?> <?php else: ?> <!-- 投稿が無い場合の内容 --> <?php endif; ?> |
これにより、呼び出したいURLの条件に一致したデータが表示されます。
そしてこのループを使用すればWordpressでのサイト制作は可能になります。
細かく解説していきます。
ユーザーが https://progblog-web.com/700/ を見たいとリクエストした瞬間に、Wordpressが700というデータを取得し表示するという形になります。
ユーザーがhttps://progblog-web.com/blog を見たいとリクエストした場合は、このURLに適するメインクエリをWordpress上で判断し、ある限りすべてを表示します。
メインループはその名の通り、メインなので、ひとつのページで1件しか使えません。
そのため例えば記事ページでコンテンツをメインループで表示した場合、関連記事やランキング表示するための手段がサブループと呼ばれるものになります。
サブループ
上記で書いた通り、メインループ以外で使用するものがサブループと呼ばれます。
こちらはURLで自動的に取得されるメインループと違い、任意で取得するものになりますので、条件設定などが可能になります。
サブループには代表的な形が2つあります。
get_post()
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $args = array( // 取得したい投稿の条件 ); $myposts = get_posts( $args ); foreach ( $myposts as $post ): setup_postdata( $post ); ?> <!-- ここにループ内容 --> <?php endforeach; wp_reset_postdata();?> <?php else : ?> <!-- 投稿が無い場合の内容 --> <?php endif; ?> |
こちらはWordpressのテンプレートタグを使用したループになります。
詳細はこちらを参照してみてください。
get_post() は次に紹介する WP_Queryメソッド を使用し、実行結果を受け取るテンプレートになります。
対して WP_Query はWP_Queryメソッド をそのまま利用するので、取得条件や、それに付随する機能をメインループと同じように利用できることになります。
WP_Query
1 2 3 4 5 6 7 8 9 10 11 |
<?php $args = array( // 取得したい投稿の条件 ); ?> <?php $query = new WP_Query( $args ); ?> <?php if( $query->have_posts() ) : ?> <?php while ( $query->have_posts() ) : $query->the_post(); ?> <!-- ここにループ内容 --> <?php endwhile; wp_reset_postdata(); ?> <?php else : ?> <!-- 投稿が無い場合の内容 --> <?php endif; ?> |
WP_Query は wp-includes/class-wp-query.php に定義されているクラスで、WordPressへの複雑な投稿やページのリクエストを取り扱います。
get_post() も同様ですが「取得したい投稿の条件」をアレンジすることで、欲しいデータを呼び出すことができます。
条件はこちらを参照にしてみてください。
サブループに関してふたつの方法を紹介しましたが、正直どちらも大した違いがないので、使う方の好みによるかと思います。
ただ後々修正が出てくることを考えると機能の多いWP_Query を使用していれば問題ありません。