WordPressサイトを運営していると、あるカテゴリーの記事だけ表示内容やレイアウトを変えたいというケースが出てきます。この記事では、個別投稿ページ(single.php
)で特定のカテゴリーに応じて要素を表示・非表示にするための実装方法を3つのアプローチで紹介します。
1. PHPでカテゴリーを条件分岐して表示を切り替える
single.php
内でin_category()
関数を使い、特定カテゴリーの記事にだけ異なる処理を行うことが可能です。以下は、特定カテゴリーに属する投稿の場合だけ本文の代わりにメッセージを表示する例です。
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php if ( in_category( 'news' ) ) : ?>
<p>この内容は非表示になっています。</p>
<?php else : ?>
<div class="entry-content">
<?php the_content(); ?>
</div>
<?php endif; ?>
<?php endwhile; endif; ?>
in_category()
にはカテゴリースラッグ、ID、または配列を渡すことができます。複数カテゴリに対応したい場合は、in_category( array( 'news', 'column' ) )
のように記述します。
2. 子テーマでカテゴリー専用テンプレートを作成する
カテゴリーごとに異なるテンプレートでデザインを完全に分けたい場合は、子テーマに専用テンプレートファイルを作成するのが最も柔軟です。
たとえば、news
というスラッグのカテゴリー用に以下のようなファイルを作成します:
single-news.php
このファイルを子テーマのルートに配置すれば、news
カテゴリーの投稿だけがこのテンプレートを使用して表示されます。カテゴリーごとのデザイン変更や表示制御に最適な方法です。
3. CSSで特定カテゴリーにだけスタイルを適用する
WordPressでは、<body>
タグに自動でカテゴリースラッグ付きのクラスが付与されます。これを活用して、CSSで特定のカテゴリーの投稿だけにスタイルを変更することができます。
body.category-news .target-element {
display: none;
}
ここでは、news
カテゴリーに属する投稿で、.target-element
というクラスを持つ要素を非表示にしています。PHPを触らずに実装できるため、デザイン面の制御に便利です。
まとめ
特定のカテゴリーの記事だけ表示内容を変えたい場合、WordPressでは以下の3つの方法が使えます。
- PHPによるカテゴリー判定で要素の表示を制御
- 子テーマにカテゴリー専用テンプレートを用意
- CSSで特定カテゴリーのみスタイルを変更
要件や目的に応じてこれらの手法を使い分けることで、より柔軟で管理しやすいカスタマイズが可能になります。複数の方法を組み合わせて、最適な構成を目指しましょう。