wordpressをCMSとして企業サイトを作るときに役立つ、複数ループのやり方を紹介。

少々、前置きが長くなりますけど。

wordpressをCMSとして使用する際のシンプルなページ構成例

企業サイトなどでwordpressをCMSとして使用する場合、サイトの規模にもよりますが、「お知らせ」などの日々更新されるコンテンツを「ブログ記事」として作成し、その他を「固定ページ」として作成するのが、一般的かと思います。

wordpressでは、固定ページをサイトのトップページ(フロントページ)に設定できるため、スマートなサイト設計が可能です。実在するサイトを例に挙げて説明したほうが分かりやすいと思うので、僕が構築した「とんぼ整体院」のサイトを例に、説明を進めていきます。

下記は、とんぼ整体院のページ構成をまとめたものです。

とんぼ整体院サイトマップ

非常に作りやすそうな、シンプルな構成ですね。更新されるコンテンツが「院長ブログ」しかないので、そこを投稿ページとするだけで、残りのコンテンツはすべて固定ページです。

テンプレートも、以下の5種類しかありません。

  • front_page.php(ページテンプレート)
  • home.php
  • page.php
  • category.php
  • single.php

まさに、こういった記事の事例として紹介するのにふさわしいですね。

フロントページのテンプレート

とんぼ整体院 画面

フロントページは、固定ページですから、テンプレートは、固定ページのテンプレートとして作成します(詳細)。

今回、フロントページにブログの新着投稿を表示したいので、テンプレートには、そのページの内容を出力するためのループと、新着記事を表示するためのループの、計2つのループが必要です。

<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
 
        そのページの内容
 
    <?php endwhile; ?>
<?php endif; ?>

上記が、そのページの内容を表示させるための、ふつうのループです。

<?php $my_query = new WP_Query('&cat=0'); ?>
<?php if ($my_query->have_posts()) : ?>
    <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
 
        新着記事の内容
    
    <?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata(); ?>

上記が、新着記事を表示させるために追加するループです。

追記:wordpress3.0以降向けに、wp_reset_postdataの記述を追加しました。

ポイントは、新しいオブジェクトを作ることです。新しくオブジェクトを作らずに、1回目のループと同じものにquery_posts()を付け足して下記のように記述しても同じように新着記事を表示することはできますが、

<?php query_posts('&posts_per_page=5&cat=0'); ?>
<?php if (have_posts()) : ?>
    <?php while (have_posts()) : the_post(); ?>
 
        新着記事の内容
 
    <?php endwhile; ?>
<?php endif; ?>

この場合、そのループ後のis_front_page()条件分岐などの判定が正しく行えなくなります。条件分岐ってループのクエリで判定してるんですかね?このサイトでは、footer.php内で、条件分岐でサブメニューを出すようにしているため、この方法は使えませんでした。

・・・とりあえず、この記事はこれで終わりですが、wordpressでの企業サイトの作り方が詳しく載っているページがあまりないので、最初から最後までの全手順を掲載するのも面白そうですね。いつか気が向いたら、やってみたいと思います。

もしも英語が話せたなら・・・