WordPress・カテゴリごとに違うsingle.phpを表示する方法
公開日:
最終更新日:2024/05/02
2021年12月6日リライトしました。
ワードプレスで記事を書く際、カテゴリごとに違うテンプレートで吐き出したいという事もあるかと思います。
例えば、基本的には通常のブログを書いているけど、たまに本のレビューなんかもしており、そのレビューはカスタムフィールドなどでフォーマット化したページで表示したい。といった場合。
カスタムフィールドの使い方はまた別途お伝えしますが、ここれはカテゴリー毎に違うデザインのテンプレートを使う方法となります。
条件分岐を使わない「簡単版」もアップしました。(2021年12月6日)
⇒【簡単版】WordPress・カテゴリごとに違うsingle.phpを表示する方法
Contents
①既存のsingle.phpをローカルに保存します。
FTPなどでサーバーのテーマフォルダの中から、single.phpをパソコンなどにダウンロードします。このsingle.phpが、普通に記事を投稿した際に記事詳細ページとして吐き出されるテンプレートです。
②single.phpを違う名前にリネームします。
これは通常の記事を書く際に使用します。
仮にsingle-default.phpとします。
③もう一度single.phpを違う名前にリネーム
「本のレビュー」専用のページの投稿画面を作るとします。
例えば「本」というカテゴリ(スラッグはbooksとします。)に記事をアップする際に専用のフォーマットで表示されるようにするとして、single-books.phpなどにします。
single-booksの部分は何でも好きな文字列でOKです。ただし必ず半角英数にしてください。
④いったんサーバーにアップ
サーバーのテーマフォルダに上記①~③で作ったphpをアップします。今のところリネームしただけで、中身はそのままで大丈夫です。
アップしたら「外観」「テーマの編集」と進むと、右側のphpのリストにアップしたsingle.phpが表示されていると思います。
⑤カテゴリに合わせて分岐させる。
ここからはワードプレスのテーマの編集画面での作業です。
まず、single.phpを開きます。記事の詳細へアクセスする際まずはこのsingle.phpを見に行くので、ここに分岐を書きます。
すでにsingle.phpに入っているソースを丸ごと消して、以下に書き換えます。
- <?php
- $post = $wp_query->post;
- if ( in_category('books') ) {
- include(TEMPLATEPATH.'/single-books.php');
- } elseif ( in_category('xxx') ) {
- include(TEMPLATEPATH.'/single2.php');
- } else {
- include(TEMPLATEPATH.'/single-default.php');
- }
- ?>
3行目のbooksがカテゴリで設定したスラッグです。
4行目のsingle-books.phpが、本のレビューを吐き出すテンプレートです
上記の例では、booksというスラッグのカテゴリにチェックを入れて記事をアップすると、single-books.phpのフォーマットで記事ページを吐き出しますよ。
で、もしそれ以外にも同じようなことをしたいとして、それのスラッグがxxxだった場合、single2.phpで記事を吐き出しますよ。
それ以外のカテゴリの場合はsingle-default.phpで記事を吐き出しますよ。
という指令です。
single-books.phpの中身はここでは本のレビュー用ですので、カスタムフィールドなりなんなりで、それに合わせたphpにカスタマイズしてください。(この記事ではsingle.phpのカスタマイズは割愛します。)
single-default.phpは、通常の記事用のテンプレートなので、そのままで構いません。(もともと通常の記事を書く用のphpからリネームしてアップしただけなので)