テーマ開発・テンプレートで骨組みを作る

page.phpで会社案内ページを作る

会社案内・アクセスなどの固定ページを受け持つpage.phpを作ります。1件だけでもループを書く理由と、the_title/the_contentの基本形をここで固めます。

トップページの次は、会社案内のような固定ページの担当——page.phpを作ります。ここで書くコードは、実はこの先のsingle.phpともほぼ共通。「1件の内容を表示する」テンプレートの基本形を、この回で手に入れます。

page.phpの基本形

<?php get_header(); ?>

<main class="section">
  <?php while (have_posts()) : the_post(); ?>
    <article>
      <h1 class="page-heading"><?php the_title(); ?></h1>
      <div class="entry-content">
        <?php the_content(); ?>
      </div>
    </article>
  <?php endwhile; ?>
</main>

<?php get_footer(); ?>

the_title()がページのタイトル、the_content()ブロックエディタで書いた本文まるごとを出力します。管理画面で編集した内容が、この2つの札から流れこんでくるわけです。

「1件なのにループ?」問題

固定ページは1件しか表示しないのに、whileのループで囲むのは変に見えますよね。これはWordPressの流儀で、表示対象が1件でも複数でも、記事は必ずループで受け取ることになっています。

  • ループが準備運動(the_postがデータを使える状態にセットする)を兼ねているため、1件でも省略しない
  • おかげで、一覧も詳細も同じ型で書ける——覚えることが減る

「1件でもループ。ループは準備運動」とだけ覚えれば十分です。

front-page.phpとの違いに注目

前回はWP_Queryで自分から注文しました。今回は注文書がありません。それでも動くのは、URLに応じてWordPressが最初から記事を用意してくれているからです。

  • 会社案内のURLに来た→WordPressが「会社案内」の固定ページを準備→page.phpはループで受け取るだけ
  • これをメインループと呼びます。注文書(WP_Query)は「メインとは別のものが欲しいとき」だけ使う

この区別がつくと、テーマのコードがぐっと読めるようになります。

見出しまわりのCSS

会社案内ページ用に、少しだけスタイルを足しておきます。

.page-heading {
  background: #eaf4f6;
  padding: 28px 5%;
  margin: 0 0 24px;
  font-size: 24px;
  color: #2a6f7c;
  text-align: center;
}
.entry-content {
  max-width: 700px;
  margin: 0 auto;
}

このレッスンのまとめ

  1. 固定ページの担当page.phpは、ループ+the_title+the_contentが基本形——single.phpもほぼ同じ型
  2. 1件でもループで受け取るのがWordPressの流儀(ループは準備運動を兼ねる)
  3. URLが決めた記事を受け取るメインループと、自分で注文するサブループ(WP_Query)を区別する

やってみよう:会社案内ページを開通させる

シマエナガ堂の会社案内を作ります。

  1. page.phpを作り、上のコードを保存。style.cssにも追記する
  2. 管理画面の「固定ページ」→「新規追加」で、タイトル「会社案内」のページを作る
  3. 本文はブロックエディタで自由に——見出し「シマエナガ堂について」、段落、リスト(所在地・設立・事業内容)など
  4. 公開して表側で開く——テンプレートの額縁に、ブロックで書いた中身が流れこんでいれば成功
  5. ヘッダーのナビ「会社案内」のhref=”#“を、このページのURLに書きかえておく(本物のメニュー化は後の章で)

これで「トップ」と「会社案内」が開通。次は、お知らせの一覧と詳細です。