WordPressを極めるにはWordPressループを知っておこう

WordPressの基本はなんていっても「WordPressループ」
これを極めれば「なんでもこい!」なんですが、
意外と苦労するのですよ。

今回のお仕事でも結構苦労しました。
備忘録的にWordPressループをメモしておきます。
複雑な制御については、また改めて…

基本のループ

WordPressを普通のブログとして使うときなどは、
この基本形を使う場合がほとんどです。
この基本形を叩き込んでおきましょう。

1
2
3
4
5
6
7
8
<?php if ( have_posts() ) : ?>                  // 記事の有無
  <?php while ( have_posts() ) : the_post(); ?> // 投稿記事分繰り返し処理と読み込み
    <h2><?php the_title(); ?>                   // タイトル
    <?php the_content(); ?>                     // 本文
  <?php endwhile; ?>                            // 繰り返し処理終了
<?php else : ?>                                 // 記事がなかった場合
  <p>記事がありませんでした</p>
<?php endif; ?>                                 // 記事があるかどうかの判定終了

主にブログなどの、カテゴリーやアーカイブのリストなどを表示するときに
使う場合が多いですね。

メインループ

表示結果を強制的に
好きな条件で設定したい場合は
「メインループ」である「query_posts」を使います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
  $args = array(
     'category_name' => 'cat-1',
     'posts_per_page' => 5 ); ?>                // ループの表示条件を書く
<?php query_posts( $args ); ?>                 // ループの条件をセットする
?>
<?php if ( have_posts() ) : ?>    
  <?php while ( have_posts() ) : the_post(); ?>
    <h2><?php the_title(); ?></h2>
    <?php the_content(); ?> 
  <?php endwhile; ?>
<?php else : ?>
  <p>記事がありませんでした</p>
<?php endif; ?>
<?php wp_reset_query(); ?>                    // ループの条件をリセットする

配列「array」に条件を複数入れて、
$argsに入れて、query_posts( $args )で実行すれば
お望み通りの結果が表示されます。

ただし、このメインループは
1ページに1回しか使えません。

最後は
wp_reset_query
で必ずリセットを行ってください。

サブループ

表示したい条件が2つ以上ある場合や、
ループを入れ子にしたい場合は
サブループを使いましょう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
  $args = array(
     'category_name' => 'cat-1',
     'posts_per_page' => 5 ); ?>              // ループの表示条件を書く
<?php $my_query = new WP_Query( $args ); ?>   // クエリーを新規作成
<?php if ( $my_query->have_posts() ) : ?>
  <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?> 
                                              // global変数の$postを上書き
   <h2><?php the_title(); ?></h2>
   <?php the_content(); ?> 
  <?php endwhile; ?>
<?php else : ?>
  <p>記事がありませんでした</p>
<?php endif; ?>
<?php wp_reset_postdata(); ?> // ループの条件をリセットする

メインループと若干ちがいますが、基本は同じです。
あと、get_queryでも、同じことができるようです。

次の機会に複雑なループについて説明しますね。

基礎からのWordPress (BASIC LESSON For Web Engineers)

新品価格
¥3,129から
(2013/7/6 14:31時点)

この本でWordPressループを理解できました。
けっこう助かっています。