記事内に商品プロモーションが含まれる場合があります
WordPressでは、簡単に一部のカテゴリーの記事だけ別デザインに変えることができます。方法はいくつかありますが、この記事ではそれぞれの方法の「使いどころ」と「手順」を詳しく解説していきます。違いを理解したうえで、目的に合った方法を選ぶのが良いでしょう。
方法1:特定のカテゴリーだけ読み込むCSSを切り替える
どんなときにおすすめ? 一部のカテゴリーの記事のデザイン(CSS)を大幅に変えたいときにこの方法を使うと良いでしょう。
特定のカテゴリーの記事だけ別のCSSファイルを読み込むようにする方法です。CSSを大幅に変えたいときは、この方法が良いでしょう。
方法1の大まかな手順
style.css
を複製→◯◯.css
を作るheader.php
で特定のカテゴリーのときに◯◯.css
を読み込むように設定◯◯.css
を好きに編集
1-1:CSSファイルを複製
テーマフォルダを開き、style.css
という名前のファイルを見つけます。これを複製して◯◯.css
というように好きな名前に変えます。この例では、special.css
という名前にすることにします。これで、style.css
とspecial.css
という2つのファイルができました。
1-2:header.phpを書き換え
同じくテーマフォルダにあるheader.php
を開き、カテゴリーごとに読み込むCSSファイルを変えるように設定します。まず、Ctrl (command) + Fで「style.css」と検索してみましょう。すると、以下のようなコードが見つかるかと思います。
<link rel='stylesheet' href='****/style.css' type='text/css'/>
↑これがCSSファイルを読み込んでいるコードです。****の部分は、テーマごとに異なります。この部分を以下のように書き換えます。
<?php if ( in_category(array('スラッグ')) ) ://特定のカテゴリーの場合 ?> <link rel="stylesheet" href="****/special.css" type="text/css" /> <?php else://通常ページの場合 ?> <link rel="stylesheet" href="****/style.css" type="text/css" /> <?php endif; ?>
↑「特定のカテゴリーの記事ではspecial.css
を読み込み、それ以外のカテゴリーの記事にはstyle.css
を読み込む」というような条件分岐をしています。‘スラッグ’にはさきほど調べた英数字を''
ではさんで書きます。****の部分は、書き換え前に/style.css
の前に書かれていた文字列と同じものにしてください。
複数のカテゴリーを指定する場合
<?php if ( in_category(array('design','life','html')) ) ://特定のカテゴリーの場合 ?> <link rel="stylesheet" href="****/special.css" type="text/css" /> <?php else://通常ページの場合 ?> <link rel="stylesheet" href="****/style.css" type="text/css" /> <?php endif; ?>
複数のカテゴリーの記事のデザインを変えたい場合には、上のようにarray('スラッグ1','スラッグ2','スラッグ3','スラッグ4')
というようにarray()の中にカンマで区切って書きます。
親カテゴリーを指定しても子カテゴリーのデザインは変わらない
例えば「親カテゴリーA」の下にある「子カテゴリーB、C、D」の全てのデザインを変えたい場合には、array('A','B','C','D')
と指定します。
1-3:専用のCSSを自由にカスタマイズ
これで特定のカテゴリーがspecial.cssを読み込むようになりました。あとは、special.cssを自由にカスタマイズすればOKですね。
【参考】デザインを3パターン以上で分けたいとき
例えば「カテゴリーAの記事」と「Bの記事」と「それ以外の記事」で3パターンのデザインを作りたいというときには、3つめのCSSファイル作ったうえで以下のように書きます。
<?php if ( in_category(array('スラッグ1')) ) ://デザインその1 ?> <link rel="stylesheet" href="****/special.css" type="text/css" /> <?php elseif ( in_category(array('スラッグ2')) ) ://デザインその2 ?> <link rel="stylesheet" href="****/special2.css"> <?php else://通常ページの場合 ?> <link rel="stylesheet" href="****/style.css" type="text/css" /> <?php endif; ?>
↑elseif(~)で条件分岐を増やしています。2つ目の専用CSSファイルは上の例ではspecial2.css
としていますが、もちろん好きな名前でOKです。
方法2:条件分岐で別のテンプレートを読み込むようにする
どんなときにおすすめ? 一部のカテゴリーの記事のHTMLをがらっと変えたいときには、この方法がおすすめです。例えば、アイキャッチ画像の挿入位置を変えたり、記事のヘッダーやサイドバーなどの構成をガラッと変えたい場合などですね。
この方法のイメージは、次の図のようになります。
記事が開くときには、はじめにsingle.php
が読み込まれます。ここには「カテゴリー判定&振り分け」のコードだけを書いておきます。つまり「ハブ」としての役割をするわけですね。そして、特定のカテゴリーの記事ではsingle-special.php
を読み込み、それ以外のカテゴリーの記事ではsingle-normal.php
を読み込みます。と言ってもよく分からないかと思うので、実際に手順を解説していきます。
2-1:single.phpを3つに複製
テーマフォルダに入っているsingle.php
を複製して、同じ中身のファイルを3つ作ります。複製したファイルの名前は好きなものでOKですが、例えば以下のようにしましょう。
3つのファイル
- single.php 振り分けるハブとしての役割
- single-normal.php 通常テンプレ
- single-special.php 特定のカテゴリ記事テンプレ
2-2:single.phpを書き換え
次にsingle.php
を「カテゴリー判別&振り分け」用のコードに書き換えます。コードを全て消して、以下のコードを書きます。
<?php if ( in_category('スラッグ') ) { //特定のカテゴリの場合 get_template_part( 'single-special' , false ); }else { //それ以外の場合 get_template_part( 'single-normal' , 'normal'); } ?>
スラッグには、さきほど調べたスラッグを''
ではさんで書きます。デザインを変えたいカテゴリーが複数ある場合には、<?php if ( in_category(array('design','life','html')) ) :?>
というようにスラッグをarray()の中に並べて書きます。これで特定のカテゴリの記事を開くと、別のテンプレート(single-special.php
)が読み込まれるようになります。なお、get_template_part()の中に書く’single-special’などには.phpをつける必要はありません。
2-3:single-special.phpをカスタマイズ
あとは、single-special.php
を好きなようにカスタマイズすればOKです。サイドバーをまるっと削除しても、そのカテゴリー固有のコンテンツを加えても良いでしょう。single-normal.php
はそれ以外のカテゴリー記事で使われるテンプレートなので、今回は何も変えなくて良いですね。
【参考】3つ以上のテンプレをカテゴリー別の条件分岐で使うには?
「カテゴリーAのときはテンプレその1、Bのときはテンプレその2…」というようにさらに条件分岐させることもできます。例えば3つのテンプレを使い分けたいときは、もう1つテンプレを複製して(例:single-more.php
)、single.php
のコードをまるっと以下のように書き換えます。
<?php if ( in_category('スラッグ1') ) { //特定のカテゴリの場合 get_template_part( 'single-special' , false ); } elseif ( in_category('スラッグ2') ) { //特定のカテゴリ2の場合 get_template_part( 'single-more' , false ); } else { //それ以外の場合 get_template_part( 'single-normal' , 'normal'); } ?>
方法3:bodyタグにカテゴリー別のclassを追加
どんなときにおすすめ? 一部のカテゴリーのCSSをほんの一部だけ変えたいときにおすすめの方法です。以下の設定をしておくと、何かとサイトのデザインカスタマイズがしやすくなるはずです。
この方法は次の2ステップで行います。
ざっくりとした流れ
- HTMLのbodyタグにカテゴリー固有のclass名を追加する例:
<body class="categoryid-5">...
- CSSでカテゴリー固有のclass名に対してCSSを指定例:
.categoryid-5 h2 {color: blue}
bodyタグにそのカテゴリーの記事にしか出力されないクラス名が入るので、特定のカテゴリーに対してのみCSSでデザイン指定ができるようになるわけですね。「何言ってるの?」という方は、CSSの書き方の基本が参考になるかと思います。
3-1:bodyタグにカテゴリー固有のclass名を追加
具体的な手順を説明していきます。まず、以下のコードをまるっとfunction.php
に追加します。
//カテゴリ固有のクラスをbodyの追加 function add_category_id_classes_to_body_classes($classes) { global $post; if ( is_single() ) { foreach((get_the_category($post->ID)) as $category) $classes[] = 'categoryid-'.$category->cat_ID; } return $classes; } add_filter('body_class', 'add_category_id_classes_to_body_classes');
出典: bodyタグのクラスにカテゴリー情報を含めて個別スタイルを設定
これで<body class="categoryid-数字"
という形でbodyタグにクラス名が出力されます。この数字=さきほど調べたカテゴリーIDです。たとえば、IDが6のカテゴリーに属する記事を開くと、bodyタグにcategoryid-6
というクラス名が追加されているはずです。きちんと出力されているか調べるためには、ブラウザーの要素の検証機能を使うのが良いかと思います。
3-2:CSSでデザインを指定
CSSファイル(style.css)を編集していきます。例えば「IDが15のカテゴリーだけ、h3の見出しデザインを変えたい」という場合、CSSに以下のように追記します。
.categoryid-15 h3 { color: red; font-size: 20px; }
.categoryid-15 h3{}
というようにセレクタに半角スペースを空けていますが、これは「クラスがcategoryid-15の要素内のh3タグ」という意味になります。
このようにWordPressなら柔軟にデザインを切り替えることができます。