WordPressサイトを運営していると、特定のカテゴリーに基づいて異なるコンテンツを表示したい場合があります。この記事では、そのための2つの関数is_category()とin_category()の違いを明確にしたうえで、それぞれの正しい使い方を解説します。
この記事でわかること
- is_category()とin_category()の根本的な違い
- カテゴリーアーカイブページを判定する方法
- 個別の投稿が特定カテゴリーに属するかを判定する方法(実務で頻出)
is_category()とin_category()の違い(最重要)
この2つは全く別の用途の関数です
is_category() は、本番WPコアで確認したところ「現在のメインクエリがカテゴリーアーカイブページ(/category/xxx/)かどうか」だけを判定する関数です。single.phpのような個別記事のテンプレートでis_category()を使っても、その投稿がどのカテゴリーに属していても常にfalseになります(個別投稿ページではメインクエリが「カテゴリーアーカイブ」ではなく「単一投稿」として扱われるためです)。一方 in_category() は、ループ内の現在の投稿が指定したカテゴリーに属しているかどうかを判定する関数で、個別投稿ページ・ホームページ・アーカイブページなどどこでも使えます。「特定カテゴリーの記事にだけ特別な表示をしたい」という要望は、ほとんどの場合in_category()が正解です。
| 関数 | 判定内容 | 使う場面 |
|---|---|---|
is_category() |
カテゴリーアーカイブページを表示中か | archive.phpやcategory.phpでページ全体の表示を切り替える場合 |
in_category() |
現在の投稿が指定カテゴリーに属するか | single.phpやループ内で投稿ごとに表示を切り替える場合 |
カテゴリーアーカイブページかどうかを判定する(is_category)
カテゴリーの一覧ページ(アーカイブページ)自体の表示を切り替えたい場合に使います。category.phpやarchive.phpなどのテンプレートで使用します。
archive.php:カテゴリーID 5のアーカイブページかどうか
if ( is_category( 5 ) ) {
// カテゴリーID 5 のアーカイブページの場合の処理
echo 'これはカテゴリーID 5 のアーカイブページです。';
}
複数のカテゴリーを対象にしたい場合は、カテゴリーIDやスラッグを配列で指定します。
archive.php:複数カテゴリーのいずれかのアーカイブページかどうか
if ( is_category( array( 5, 'news', 'blog' ) ) ) {
// カテゴリーID 5 または スラッグ 'news', 'blog' のアーカイブページの場合の処理
}
否定演算子!を使えば、特定のカテゴリーアーカイブページ以外で処理を行うこともできます。
archive.php:特定カテゴリーのアーカイブページ以外の場合
if ( ! is_category( 'news' ) ) {
// 'news' カテゴリーのアーカイブページ以外の場合の処理
}
個別の投稿が特定カテゴリーに属するか判定する(in_category、実務で頻出)
「特定カテゴリーの記事にだけバナーを表示したい」「特定カテゴリーの記事だけレイアウトを変えたい」といった、個別投稿ごとの出し分けには in_category() を使います。single.phpやループの中など、ページの種類を問わず使用できます。
single.php:現在の投稿がnewsカテゴリーに属するか
if ( in_category( 'news' ) ) {
echo 'この投稿は "news" カテゴリーに属しています。';
}
is_single()と組み合わせれば、「単一投稿ページかつ特定カテゴリー」のように条件を絞り込むこともできます。
single.php:単一投稿ページかつnewsカテゴリーの場合
if ( is_single() && in_category( 'news' ) ) {
echo 'これは "news" カテゴリーに属する投稿です。';
}
よくある質問(FAQ)
Qis_category()を個別記事ページで使ってもtrueになりません。なぜですか?
Ais_category()は「カテゴリーアーカイブページを表示しているか」を判定する関数のため、個別の投稿ページでは常にfalseになります。個別投稿がそのカテゴリーに属しているかを調べたい場合は、in_category()を使ってください。
Q特定カテゴリーの最新記事をリンク付きリストで表示するコードは?
AWP_Queryでcat=カテゴリーIDを指定し、ループ内でthe_permalink()とthe_title()を使ってリスト表示します。posts_per_pageで表示件数を調整できます。
Qwp_list_categories()でカテゴリーリストを表示する方法は?
Awp_list_categories(array(‘include’ => array(1,2,3)))で指定カテゴリーのみ表示できます。show_count=1で記事数、use_desc_for_title=1で説明文も表示できます。
まとめ
- is_category():カテゴリーアーカイブページ自体の表示を切り替えたい場合
- in_category():個別の投稿ごとにカテゴリーで表示を切り替えたい場合(実務で頻出)
- 迷ったら:「投稿ごとの出し分け」ならin_category()を選ぶ
目的が「ページ種別の判定」か「投稿ごとの判定」かを明確にしてから、適切な関数を選んでください。

