Travelogue

WordPressテンプレートを各カテゴリ等で別々に使い分ける

公開日:

WordPressバージョンが2.7になってますます便利になったWordPress。これまで以上に使う機会が増えています。特に、ページ数が多いサイトを制作するときや、クライアント側で内容を書き換えたいという要望があった場合など、私にとってかなり無くてはならないツールとなっています。
そこで、WordPressをCMSとして利用する時に超!便利な機能についていくつか書いてみたいと思います。

今回は、WordPressのテンプレートファイルを、各カテゴリやページごとに別々に使い分ける方法です。例えば、複数のカテゴリテンプレートを用意し、各カテゴリのコンテンツ内容によって使い分ける方法等について紹介します。
今回の内容は、HTMLはある程度分かるけれどPHPとかの知識は無く、見よう見真似でこれからWordPressを始めてみようという人あたりにちょうど良いと思います。

※2012年5月25日追記:このエントリーの解説は、それぞれ別々のテンプレートファイルを用意することを前提に書いてありますが、各々の違いがちょっとしたことなら、ひとつのファイルの中で条件分岐したほうがスマートかもしれません。「WordPressの条件分岐タグで各ページの表示内容を変更する」というエントリーを書きましたのでこちらもご覧ください。

WordPressの「テーマ」について

WordPressには「テーマ」と呼ばれているシステムがあります。テーマとは簡単に言うと、WordPressで作るサイトのデザインとコンテンツを自分好みに調整するためのファイルです。

テーマファイルは無料で利用できるものがインターネット上でたくさん公開されていて、それらをダウンロードして自分のサーバーにアップすれば、あとはWordPressの管理画面からワンクリックでサイトのデザインを一新することができます。

テーマファイルは自分でも作成することができます。
WordPressのテーマは、いくつかのテンプレートファイルと呼ばれるもので構成されています。
例えばトップページのためのテンプレート、カテゴリ一覧のためのテンプレート、個々の詳細ページを表示するときのためのテンプレートなど、テンプレートはそれぞれの役割ごとに別ファイルで作成することができます。

・・・というわけで、以下は自分でWordPressテーマを作ったりカスタマイズする時の話題です。
冒頭にも書いた通り、今回は「テーマ」を構成するテンプレートファイルをデフォルトのもの以外にも用意して使い分ける方法についていくつか書いていきます。

特定のカテゴリだけ専用のテンプレートを使う

これはとても簡単です。デフォルトのカテゴリテンプレートは「category.php」ですが、特定のカテゴリ専用のカテゴリテンプレートのファイル名には「category-8.php」のように、ハイフンとカテゴリIDの数字をつけて保存するだけです。

カテゴリ一覧のレイアウトが、特定のカテゴリだけ異なる場合等に便利です。
例)製品情報カテゴリの一覧表示には必ず写真のサムネイルが入るが、更新情報やプレスリリース等の一覧はただのテキストと日付だけの表示で、製品情報一覧とはレイアウトが違う場合など。

特定カテゴリ内の詳細ページのみを専用のテンプレートで表示させる

上に書いた(例)のようなケースでは、製品情報とプレスリリースでは一覧のレイアウトが違うわけですから、当然それぞれのカテゴリに含まれる詳細ページのレイアウトも別々になる場合が多いです。
そんなときには「in_category」というタグで、エントリーがどのカテゴリに属するのかを判別します。
「in_category」は通常はループの中で使うタグですが、前述のような使い方をする場合はループ外で使う必要があります。この場合、詳細ページのデフォルトのテンプレートである「single.php」に下記のコードを書きます。
もしもカテゴリ8に属するエントリーの場合はsingle1.phpを使って表示し、その他の場合はsingle2.phpを使う。という意味のコードです。

<?php
 $post = $wp_query->post;
 if ( in_category('8') ) {
 include(TEMPLATEPATH . '/single1.php');
 } else {
 include(TEMPLATEPATH . '/single2.php');
 }
 ?>

(追記)WordPress3.0以降、ここで紹介したinclude(TEMPLATEPATH . ‘/single1.php’);のような方法は非推奨になりました。代わりにget_template_partを使います。

include()とTEMPLATEPATHを使ってファイルを読み込む

上に書いたコードで使われている通り、phpの「include()」を使うと他のファイルを読み込むことができます。
例えばフッターテンプレートを読み込むときは通常は以下のように書きますが、

<?php get_footer(); ?>

別のフッター用のファイル「footer2.php」を読み込みたい場合、上記の代わりに以下のコードを書きます。

<?php include (TEMPLATEPATH . '/footer2.php'); ?>

(追記)WordPress3.0以降、ここで紹介したinclude(TEMPLATEPATH . ‘/single1.php’);のような方法は非推奨になりました。代わりにget_template_partを使います。

サイドバーテンプレートを使い分ける

複数のサイドバーを使い分けることができます。ページごとに異なるサイドバーで表示させたい場合などに便利です。
sidebar.phpとsidebar-2.phpを使い分ける場合、読み込む場所に以下のコードを書いて使い分けます。

デフォルトのsidebar.phpを読み込ませるとき

<?php get_sidebar(); ?>

sidebar-2.phpを読み込ませるとき

<?php get_sidebar('2'); ?>

ページテンプレートを作る

WordPressでは、エントリーとは別に「ページ」としてコンテンツを作成することができます。
「ページ」は、ブログのエントリーのようにどんどん投稿(追加)して日付順に並べておくようなコンテンツではなく、例えばプロフィールとかお問い合わせのような、普通のエントリーとは別格扱いのコンテンツを掲載しておくときに利用するのがおそらく一般的かと思います。

ページテンプレートのデフォルトのファイル名は「page.php」ですが、各ページごとに個別のテンプレートファイルを作ることができます。
ページテンプレートを作る時は、適当な名前(例えばpage2.phpとか)でテンプレート用のファイルを保存し、そのファイルの一番上に以下のコードを書きます。

<?php
/*
Template Name: ページテンプレート名
*/
?>

上の「ページテンプレート名」という部分にテンプレート名を書きます。
ここに書いたテンプレート名は、WordPressの管理画面のページ作成画面に、プルダウン式のメニューで表示され、各ページに適用させるテンプレートを選択することができます。

Pagetop