has_category()とは?使い方・使いどころを解説【WordPress中級者向け】

WordPressのhas_category()関数を紹介する記事のアイキャッチ画像。WordPressロゴとカテゴリーアイコン、has_category()の文字が表示されている。

はじめに:カテゴリー判定、どうしてますか?

WordPressでテーマをカスタマイズしていると、「この投稿が特定のカテゴリーに属しているかどうかを判定したい」という場面がよくあります。

たとえば、特定のカテゴリだけ装飾を変えたり、表示する内容を変えたり……。

そんなときに活躍するのが、has_category()というテンプレートタグです。

この記事では、has_category()の基本的な使い方から、実践的なコード例、そしてよくある注意点までを解説していきます。

has_category()とは?

has_category()は、投稿が指定したカテゴリーに属しているかを判定するためのテンプレートタグです。

似た関数にin_category()がありますが、has_category()はループの外でも使えるため、より汎用性の高い関数といえます。

in_category()については、WordPressのin_category()関数とは?使い方とis_category()との違いを解説【自作テーマ向け】で詳しく説明しています。

基本的な使い方

シンタックス(構文)

has_category( $category, $post )
  • $category:チェックしたいカテゴリのスラッグ、ID、名前、またはそれらの配列
  • $post(省略可):チェック対象の投稿IDまたは投稿オブジェクト。省略時は現在の投稿。

使用例①:スラッグで判定

if ( has_category( 'news' ) ) {
    echo 'この投稿は「news」カテゴリーに属しています。';
}

使用例②:複数カテゴリを判定

if ( has_category( array( 'news', 'event' ) ) ) {
    echo 'この投稿は「news」または「event」カテゴリーに属しています。';
}
WordPressのhas_category()関数の概念図。投稿「Post A」が「news」「event」「blog」の3つのカテゴリーに属しており、「news」にチェックマークが付いている。

実践的なコード例

投稿に特定のクラスを追加する

<article <?php post_class( has_category('news') ? 'news-post' : '' ); ?>>

カスタムループ内でカテゴリー判定

$query = new WP_Query( array( 'post_type' => 'post' ) );
if ( $query->have_posts() ) :
    while ( $query->have_posts() ) : $query->the_post();
        if ( has_category( 'special' ) ) {
            echo '<div class="highlight">特別記事</div>';
        }
    endwhile;
    wp_reset_postdata();
endif;
WordPressのhas_category()関数を使い、「news」カテゴリーの記事だけ背景色が変わって強調表示されたブログ画面のイメージ。

注意点:ループ外で使う場合は投稿IDが必要

ループの外で使用する場合は、対象となる投稿のIDまたはオブジェクトを明示的に渡す必要があります。

$post_id = 123;
if ( has_category( 'news', $post_id ) ) {
    echo 'この投稿はnewsカテゴリーです。';
}

渡し忘れると、意図しない結果になるので注意が必要です。

has_category()とin_category()の違い・使い分け

比較項目has_category()in_category()
使用場所ループ内・外どちらも可主にループ内
引数の指定方法ID / スラッグ / 名前 / 配列同じ
対象投稿の指定任意の投稿を指定可能グローバル投稿が対象

個別投稿ページなど、ループ外で条件分岐をしたい場合はhas_category()を使うと柔軟に対応できます。

まとめ

  • has_category()は、投稿が特定のカテゴリに属しているかどうかを判定する関数
  • in_category()との違いは「ループ外でも使える」点
  • カスタムループや条件分岐で大活躍
  • ループ外で使うときは投稿IDの指定を忘れずに

公式リファレンスリンク

has_category() – WordPress Developer Resources

このように、has_category()を使えばテーマカスタマイズの幅が広がります。ぜひ実装に取り入れてみてください。