blog

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

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

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

目次

話の流れを作るために、前提となる話を最初にちょっとだけ、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');
 }
 ?>

このページの上に戻る↑

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

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

<?php get_footer(); ?>

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

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

このページの上に戻る↑

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

複数のサイドバーを使い分けることができます。ページごとに異なるサイドバーで表示させたい場合などに便利です。
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の管理画面のページ作成画面に、プルダウン式のメニューで表示され、各ページに適用させるテンプレートを選択することができます。

このページの上に戻る↑

WordPressが最初からインストール済みの無料サーバー

SiteMixという無料レンタルサーバーでは、標準のブログ機能として最初からWordPressがインストールされています。(無料プランでは広告が表示されます)
サーバーが無料で利用できる上に、自分でデータベースを用意したりWordPressをインストールしたりする手間も無いのでかなり簡単・気軽・スピーディーにWordPressの運用を開始できます。
テーマファイルやプラグインも普通にFTPでアップ可能です。
実験・勉強用とかでも一度使ってみて損はないと思います。

このページの上に戻る↑

Trackback URL

Trackback / Pingback

  1. [...] <参考> ・travelogue [...]

    ピンバック by WordPress情報 - 特定カテゴリだけ別のテンプレートにする方法 (2009.02.02)

  2. [...] idebar(); ?>     sidebar-2.phpを読み込ませるときは <?php get_sidebar(’1‘); ?>     travelogue  ↑参考にさせていただいたサイトさま。有難うございます。(^-^)こういう有難~ [...]

    ピンバック by wordpress ページごとに違うサイドバーを表示させる | WP(WordPress)ビギナーの苦悩 (2009.05.28)

  3. [...] 参照:フリーランスWebデザイナーの日記さん http://www.travelogue.jp/blog/archives/508.html no comment / Tags: category, theme, Wordpress [...]

    ピンバック by カテゴリー毎にテーマを振り分ける « Mars Press | Mars Production Weblog (2009.08.12)

  4. [...] ートを各カテゴリ等で別々に使い分ける | フリーランスWebデザイナーの日記 http://www.travelogue.jp/blog/archives/5…; <特定カテゴリ内の詳細ページのみを専用のテンプレートで表示させる> [...]

    ピンバック by wordpressカスタマイズのメモ1 · Ribbit (2009.10.05)

  5. [...] こちらのページ「WordPressテンプレートを各カテゴリ等で別々に使い分ける」の中の「特定のカテゴリだけ専用のテンプレートを使う」に驚きの方法が! 特定のカテゴリ専用のカテゴリ [...]

    ピンバック by Welcartを使ってWordPressに商品一覧ページを作ってみた | fusigineko blog / dejavu-i (2010.02.28)

  6. [...] WordPress テンプレートを各カテゴリ等で別々に使い分ける 残念ながら、関連記事はありません。 [...]

    ピンバック by 神戸・六甲アイランドの食品専門のマーケティング・FP支援» Blog Archive » WordPressのsingleページを属するカテゴリー毎に変更するには? (2010.03.17)

  7. [...] このページに特定カテゴリに割り当てたBlogの記事のタイトル一覧を表示する方法を紹介します。 ちなみにwordpressのテンプレートに関する記述はここがものすごくわかりやすかったです。 [...]

    ピンバック by スマートフォン情報局 » WordPressでページファイルに特定カテゴリの一覧を表示する (2010.06.21)