テーマをカスタマイズするときに最低限知っておきたいこと

WordPressテーマカスタマイズするときに、最低限知っておきたいことについてまとめてみました。

テーマの基本構造を理解する

WordPressのテーマには、たくさんのファイルが含まれています。これらのうち、アクセスされたページに応じてHTMLコードを生成する役割を持つファイルを、テンプレートファイルといいます。

テンプレートファイル

WordPressでは、アクセスされたページの種類によって使用されるテンプレートファイルが異なります。下の図は、その一例です。

テンプレートファイル相関図

この図では、例えばトップページのテンプレートファイルは「index.php」が使用されるように書いてあります。しかし、この図はあくまでも一般的な組み合わせを表示しているだけで、必ずしも「index.php」が使われるわけではありません。これには、次のテンプレート階層が関係しています。

テンプレート階層

テンプレート階層とは、テンプレートファイルを出力する際の優先順位のことです。

下の図は、テンプレート階層 – WordPress Codexで紹介されている概観図です。クリックすると、拡大図が別窓で開きます。

テンプレート階層概観図

例えば、カテゴリーアーカイブ(同じカテゴリーに属する投稿を一覧表示するページ)のテンプレート階層(優先順位)は、下記のようになっています。

  1. category-slug.php
  2. category-ID.php
  3. category.php
  4. archive.php
  5. index.php

このように、カテゴリーアーカイブを表示するために使用されるテンプレートファイルは、候補が5つ以上あることがわかります。

5つ以上と書いたのは、category-slug.phpやcategory-ID.phpの「-slug」や「-ID」の部分を書き換えることで、いくつでもファイルの数が増えていくからです。

例えば、当サイトの「WordPress基礎知識」カテゴリーは、スラッグが「kiso」、IDが「1」です。このカテゴリーのアーカイブページを表示するのに使われるテンプレートファイルは、第一候補が「category-kiso.php」になります。もし、このファイルが存在しなければ「category-1.php」が使われ、以下同様に「category.php」、「archive.php」、「index.php」の順となるわけです。

4番目の「archive.php」は、カテゴリーだけではなく「日付」や「タグ」のアーカイブページの候補にもなります。カテゴリーアーカイブだけ他のアーカイブページと表示内容を分けるなら、「category.php」よりも上位にあるテンプレートファイルを修正もしくは作成すればよいことがわかります。

この他に、条件分岐タグ(後述)を利用する方法もあります。

テンプレートタグ

テンプレートタグは、Wordpressに対して何かを表示・取得させたいときに使います。テンプレートタグは、テンプレートファイルの中に記述します。

よく使われるテンプレートタグの1つに、「bloginfo()」があります。「bloginfo()」は、ブログのタイトル・URL・説明文など、ブログの情報を表示させるためのテンプレートタグです。

このように「bloginfo()」を機能させるには、つぎのように () の中に引数を記述します。※下の例で、太字部分が引数です。

ブログタイトル: <?php bloginfo(‘name‘); ?>
ブログURL: <?php bloginfo(‘url‘); ?>
ブログ説明文: <?php bloginfo(‘description‘); ?>

WordPressで使用できるテンプレートタグは、他にもたくさんあります。くわしくは、テンプレートタグ – WordPress Codex 日本語版でご確認ください。

さらに、テンプレートタグの一種である、インクルードタグ条件分岐タグも覚えておくといいでしょう。

インクルードタグ

インクルードタグは、他のテンプレートファイルを読み込むために使います。サイトのヘッダーやフッター、サイドバーを表示させるために、ほとんどのテーマの中で記述されています。

インクルードタグ

上の図は、「single.php」が出力されるときに、「header.php」「footer.php」「sidebar.php」が読み込まれる様子を示しています。このとき、「single.php」の中には、下記のインクルードタグが記述されています。

  • <?php get_header(); ?>
  • <?php get_footer(); ?>
  • <?php get_sidebar(); ?>

この他にも、検索フォーム(searchform.php)を読み込むための「<?php get_search_form(); ?>」や、コメントテンプレート(comments.php)を読み込むための「<?php comments_template(); ?>」もよく利用されます。

「include文」によるファイルの読み込み

その他のテンプレートファイルを読み込むためには、PHPの「include文」を使います。例えば、「sample.php」というファイルを読み込むには、

<?php include( TEMPLATEPATH . ‘/sample.php’ ); ?>

と記述します。

条件分岐タグ

条件分岐タグは、出力するページの種類や、ページ内に含まれるデータに応じて条件を判断し、処理する内容を分けることができます。

前述の「カテゴリーアーカイブだけ他のアーカイブページと表示内容を分けるなら…」という場合にも、条件分岐タグが使えます。テンプレートファイル「archive.php」の中で、カテゴリーアーカイブだけ特別な表示をするには、下記のように記述します。

<?php if ( is_category() ) : ?>
	ここにカテゴリーアーカイブに表示する内容を記述
<?php else : ?>
	ここにカテゴリー以外のアーカイブページに表示する内容を記述
<?php endif; ?>

カテゴリーアーカイブで、特定のカテゴリーだけ異なる表示をさせるということも可能です。スラッグが「sample」のカテゴリーだけをカスタマイズするための条件分岐タグは、

<php if ( is_category('sample') ) : ?>

と書きます。この他によく使われる条件分岐タグは、つぎの通りです。

is_home() メインページかどうかを判断
is_front_page() フロントページかどうかを判断
is_single() 個別投稿ページかどうかを判断
is_page() 固定ページかどうかを判断

ループ

ループは、複数の記事を連続してくり返し表示させるために使われます。例えば「新着記事一覧」のように、いくつかの投稿記事が最新順で表示されるときなどにも、ループが使われています。

ループの基本構造

<?php if (have_posts()) : ?>
投稿一覧を表示する前の処理内容
<?php while (have_posts()) : the_post(); ?>
各投稿を表示する処理内容
<?php endwhile; ?>
投稿一覧を表示した後の処理内容
<?php else : ?>
投稿が無いときの処理内容
<?php endif; ?>

ループ機能をカスタマイズするためには、この構造の中にHTMLやテンプレートタグを記述します。


以上、テーマをカスタマイズするときに最低限知っておきたいことについて、まとめてみました。それぞれ要点のみを書いていますので、わかりにくい場合は下記の個別記事を参照してください。

関連ページ

2011年7月4日