【WordPress】記事のカテゴリーを取得する方法|get_the_category・the_category・WP_Query・カスタムタクソノミー完全ガイド

WordPressで記事のカテゴリー情報を取得する場面は数多くあります。「パンくずリストの表示」「カテゴリーに応じたデザイン変更」「関連記事の表示」「カテゴリー別のアーカイブ」など、テーマ開発において必須の知識です。

この記事では、get_the_category() を中心に、WordPress でカテゴリーを取得・表示するための関数群を体系的に解説します。基本的な使い方から、カスタムタクソノミー対応、WP_Query でのカテゴリー条件指定まで、実務で必要なパターンを網羅します。

この記事で学べること

  • get_the_category() でカテゴリーオブジェクトを取得する基本
  • the_category() でHTMLリンクを直接出力する方法
  • get_categories() で全カテゴリー一覧を取得する方法
  • カテゴリーオブジェクトのプロパティ一覧と活用法
  • 親子カテゴリーの階層を辿る方法
  • カスタムタクソノミー対応(get_the_terms / wp_get_post_terms)
  • WP_Query でカテゴリー条件を指定して記事を取得する方法
  • カテゴリーに応じた条件分岐・スタイル変更の実践テクニック
スポンサーリンク

基本:get_the_category() でカテゴリーを取得する

最も基本的なカテゴリー取得関数です。現在の投稿(または指定IDの投稿)に紐づくカテゴリーオブジェクトの配列を返します。

基本的な使い方
<?php
// 現在の記事のカテゴリーを取得
$categories = get_the_category();

if ( $categories ) {
    foreach ( $categories as $category ) {
        echo '<a href="' . esc_url( get_category_link( $category->term_id ) ) . '">' . esc_html( $category->name ) . '</a>';
    }
}
?>
投稿IDを指定して取得
<?php
// 投稿ID: 123 のカテゴリーを取得
$categories = get_the_category( 123 );

// 最初のカテゴリー名だけ取得する
if ( ! empty( $categories ) ) {
    $first_cat = $categories[0];
    echo esc_html( $first_cat->name );  // 例: "WordPress"
}
?>

カテゴリーオブジェクトのプロパティ一覧

get_the_category() が返すオブジェクトには、以下のプロパティが含まれます。

プロパティ 説明
term_id int カテゴリーのID 5
name string カテゴリー名(表示名) WordPress
slug string スラッグ(URL用の識別子) wordpress
term_group int ターム グループ 0
term_taxonomy_id int タクソノミーID 5
taxonomy string タクソノミー名 category
description string カテゴリーの説明文 WordPress関連の記事
parent int 親カテゴリーのID(0=なし) 0
count int そのカテゴリーの記事数 42
cat_ID int term_idのエイリアス(後方互換) 5
プロパティの活用例
<?php
$categories = get_the_category();

if ( $categories ) {
    $cat = $categories[0];

    echo $cat->name;         // カテゴリー名: "WordPress"
    echo $cat->slug;         // スラッグ: "wordpress"
    echo $cat->term_id;      // ID: 5
    echo $cat->count;        // 記事数: 42
    echo $cat->parent;       // 親ID: 0(親なし)
    echo $cat->description;  // 説明文
}
?>

関連記事:カテゴリーの数を簡単に取得する方法

get_category() と get_the_category() の違い

名前が紛らわしい2つの関数ですが、役割が異なります。

関数 引数 戻り値 用途
get_category( $id ) カテゴリーID 1つのオブジェクト IDから特定のカテゴリー情報を取得
get_the_category( $post_id ) 投稿ID(省略可) オブジェクトの配列 投稿に紐づく全カテゴリーを取得
get_category_by_slug( $slug ) スラッグ文字列 1つのオブジェクト スラッグからカテゴリー情報を取得
get_category() の使い方
<?php
// カテゴリーID: 5 の情報を取得
$cat = get_category( 5 );
echo $cat->name;   // "WordPress"
echo $cat->count;  // 42

// スラッグからカテゴリーを取得
$cat = get_category_by_slug( 'wordpress' );
echo $cat->term_id;  // 5

// IDからカテゴリー名だけ取得(文字列で返る)
$name = get_the_category_by_ID( 5 );
echo $name;  // "WordPress"
?>

the_category() でカテゴリーリンクを直接出力する

get_the_category() がオブジェクトを返すのに対し、the_category() はHTMLリンクを直接出力します。テンプレートで手軽にカテゴリーリンクを表示したい場合に便利です。

the_category() の使い方
<?php
// デフォルト(各カテゴリーを <li> タグで出力)
the_category();
// 出力: <ul><li><a href="...">WordPress</a></li></ul>

// 区切り文字を指定(カンマ区切り)
the_category( ', ' );
// 出力: <a href="...">WordPress</a>, <a href="...">PHP</a>

// パイプ区切り
the_category( ' | ' );
// 出力: <a href="...">WordPress</a> | <a href="...">PHP</a>
?>
関数 戻り値 特徴 用途
get_the_category() 配列(オブジェクト) データを取得して自由に加工 カスタム表示・条件分岐
the_category() なし(直接出力) HTMLリンクを即座に出力 テンプレートでの簡易表示
get_the_category_list() 文字列 HTMLリンク文字列を返す 変数に代入して後から出力

関連記事:特定のカテゴリー名をリンク付きで表示する方法カテゴリーやタグの一覧を指定した区切り文字で表示する方法

get_categories() で全カテゴリー一覧を取得する

投稿に紐づくカテゴリーではなく、サイト全体のカテゴリー一覧を取得するには get_categories() を使います。

全カテゴリーを一覧取得
<?php
$args = array(
    'orderby'    => 'name',
    'order'      => 'ASC',
    'hide_empty' => true,  // 記事のないカテゴリーを除外
);

$categories = get_categories( $args );

foreach ( $categories as $category ) {
    $link = get_category_link( $category->term_id );
    printf(
        '<a href="%s">%s(%d件)</a>',
        esc_url( $link ),
        esc_html( $category->name ),
        $category->count
    );
}
?>
get_categories() の主なパラメータ
$args = array(
    'taxonomy'   => 'category',   // タクソノミー(デフォルト: category)
    'orderby'    => 'name',       // 並び順: name / count / id / slug
    'order'      => 'ASC',        // ASC / DESC
    'hide_empty' => true,         // 空カテゴリーを除外するか
    'exclude'    => '1',          // 除外するカテゴリーID(未分類を除外)
    'include'    => '',           // 含めるカテゴリーIDのみ
    'parent'     => 0,            // 親カテゴリーID(0=トップレベルのみ)
    'child_of'   => 0,            // 指定IDの子孫をすべて取得
    'number'     => '',           // 取得件数(空=無制限)
);

関連記事:カテゴリ一覧に記事数を表示する方法最上位(第一階層)のカテゴリーのみを取得する方法

wp_list_categories() でHTMLリストを自動生成する

サイドバーやナビゲーションでカテゴリー一覧をHTMLリスト形式で出力するなら、wp_list_categories() が最も手軽です。

サイドバーにカテゴリーリストを表示
<?php
// 基本(<li> タグのリストを出力)
wp_list_categories( array(
    'title_li'     => '',       // デフォルトの「カテゴリー」タイトルを非表示
    'show_count'    => true,    // 記事数を表示
    'hierarchical'  => true,    // 階層構造で表示
    'hide_empty'    => true,    // 空カテゴリーを非表示
    'exclude'       => '1',     // 未分類を除外
    'depth'         => 2,       // 2階層目まで表示(0=全階層)
) );
?>

<!-- 出力例 -->
<li class="cat-item cat-item-5">
    <a href="...category/wordpress/">WordPress (42)</a>
    <ul class="children">
        <li><a href="...">テーマ (15)</a></li>
    </ul>
</li>

? 使い分け:get_categories() はデータを配列で取得して自由に加工したい場合に、wp_list_categories() はHTMLをそのまま出力して済ませたい場合に使います。

wp_get_post_categories() でカテゴリーIDの配列を取得する

カテゴリーオブジェクトではなく、ID の配列だけが欲しい場合は wp_get_post_categories() が便利です。

IDの配列で取得
<?php
// デフォルト: IDの配列を返す
$cat_ids = wp_get_post_categories( get_the_ID() );
// 結果: array( 5, 12, 23 )

// オブジェクトとして取得することも可能
$cats = wp_get_post_categories( get_the_ID(), array( 'fields' => 'all' ) );
// 結果: array( WP_Term オブジェクト, ... )

// 名前だけ取得
$cat_names = wp_get_post_categories( get_the_ID(), array( 'fields' => 'names' ) );
// 結果: array( "WordPress", "PHP", "開発" )
?>
関数 デフォルトの戻り値 ID指定 fields指定
get_the_category() オブジェクト配列 ✅ 第1引数
wp_get_post_categories() ID配列 ✅ 第1引数(必須) ✅ all / names / ids
get_the_terms() WP_Term配列 ✅ 第1引数(必須) ❌(常にオブジェクト)

親子カテゴリーの階層を辿る

WordPressのカテゴリーは階層構造を持てます。親カテゴリーを辿ったり、最上位カテゴリーを取得する方法を紹介します。

親カテゴリーを辿る
<?php
// 現在のカテゴリーの祖先一覧を取得(最上位が先頭)
$categories = get_the_category();

if ( $categories ) {
    $cat = $categories[0];

    // get_ancestors(): 子→親→祖父の順でIDを返す
    $ancestors = get_ancestors( $cat->term_id, 'category' );
    // 例: array( 12, 3 )  ← 親ID=12, 祖父ID=3

    // 最上位カテゴリーを取得
    if ( ! empty( $ancestors ) ) {
        $root_id  = end( $ancestors );  // 最上位のID
        $root_cat = get_category( $root_id );
        echo $root_cat->name;  // "Web開発"
    } else {
        // 親がない = 自身が最上位
        echo $cat->name;
    }
}
?>
get_category_parents() でパンくず風の表示
<?php
$categories = get_the_category();

if ( $categories ) {
    // リンク付きで親カテゴリーを辿って表示
    $parents = get_category_parents(
        $categories[0]->term_id,
        true,   // リンクを付けるか
        ' > ' // 区切り文字
    );
    // 出力: <a href="...">Web開発</a> > <a href="...">WordPress</a> >

    if ( ! is_wp_error( $parents ) ) {
        echo rtrim( $parents, ' > ' );
    }
}
?>

関連記事:最上位(第一階層)のカテゴリーのみを取得する方法

カスタムタクソノミー対応:get_the_terms() / wp_get_post_terms()

標準の「カテゴリー」だけでなく、カスタムタクソノミー(カスタム分類)のタームを取得するには get_the_terms() または wp_get_post_terms() を使います。

get_the_terms() でカスタムタクソノミーを取得
<?php
// カスタムタクソノミー "genre" のタームを取得
$terms = get_the_terms( get_the_ID(), 'genre' );

if ( $terms && ! is_wp_error( $terms ) ) {
    foreach ( $terms as $term ) {
        $link = get_term_link( $term );
        printf(
            '<a href="%s">%s</a> ',
            esc_url( $link ),
            esc_html( $term->name )
        );
    }
}
?>
wp_get_post_terms() でより柔軟に取得
<?php
// より細かい条件を指定できる
$terms = wp_get_post_terms( get_the_ID(), 'genre', array(
    'fields'  => 'names',    // ids / names / all / slugs
    'orderby' => 'name',
    'order'   => 'ASC',
) );
// 結果: array( "SF", "ファンタジー", "ミステリー" )

// 標準カテゴリーにも使える
$cat_slugs = wp_get_post_terms( get_the_ID(), 'category', array(
    'fields' => 'slugs',
) );
?>

? ポイント:get_the_terms()wp_get_post_terms() はどちらもカスタムタクソノミーに対応していますが、wp_get_post_terms() の方が fields パラメータで取得形式を柔軟に指定できます。標準カテゴリー(taxonomy: category)にも使えるので、汎用的に使いたい場合はこちらがおすすめです。

関連記事:複数カテゴリに属する記事をタクソノミー一覧ページで表示する方法タクソノミーの存在をチェックする方法

カテゴリーアーカイブページ用の関数

カテゴリーアーカイブページ(/category/wordpress/ のようなページ)で使う専用関数を紹介します。

カテゴリーアーカイブ用関数
<?php
// single_cat_title(): カテゴリーページのタイトルを取得・表示
if ( is_category() ) {
    // 直接出力
    single_cat_title( 'カテゴリー: ' );
    // 出力: "カテゴリー: WordPress"

    // 変数に取得(第2引数を false に)
    $title = single_cat_title( '', false );
    echo '<h1>' . esc_html( $title ) . ' の記事一覧</h1>';
}

// category_description(): カテゴリーの説明文を取得
if ( is_category() ) {
    $desc = category_description();
    if ( $desc ) {
        echo '<div class="cat-description">' . $desc . '</div>';
    }

    // 特定カテゴリーIDの説明を取得(アーカイブ以外でも使える)
    $desc = category_description( 5 );
}
?>
関数 用途 使用場所
single_cat_title() カテゴリー名の取得・表示 category.php / archive.php
category_description() カテゴリーの説明文を取得 category.php / archive.php
get_queried_object() 現在のカテゴリーオブジェクト全体 テンプレートのどこでも

カテゴリーに応じた条件分岐

現在の投稿が特定のカテゴリーに属しているかを判定し、表示を切り替える方法です。

in_category() で判定
<?php
// カテゴリーID、名前、スラッグのいずれでも指定可能
if ( in_category( 'wordpress' ) ) {
    echo 'WordPressの記事です';
}

// 複数カテゴリーのいずれかに属しているか
if ( in_category( array( 'wordpress', 'php', 'javascript' ) ) ) {
    echo 'プログラミング系の記事です';
}

// 投稿IDを指定して判定
if ( in_category( 5, 123 ) ) {
    // 投稿ID: 123 がカテゴリーID: 5 に属しているか
}
?>
has_category() と is_category() の違い
<?php
// has_category(): 投稿が特定のカテゴリーを「持っている」か
// → in_category() と同等(投稿ページで使用)
if ( has_category( 'wordpress' ) ) {
    // この投稿は "wordpress" カテゴリーを持っている
}

// is_category(): 現在のページがカテゴリーアーカイブか
// → カテゴリーページ(archive)の判定に使用
if ( is_category( 'wordpress' ) ) {
    // 現在表示中のページが "wordpress" カテゴリーアーカイブ
}

// has_term(): カスタムタクソノミーにも使える汎用版
if ( has_term( 'sf', 'genre' ) ) {
    // この投稿は "genre" タクソノミーの "sf" タームを持っている
}
?>
関数 判定対象 使用場面
in_category() 投稿がカテゴリーに属するか 個別投稿ページ・ループ内
has_category() in_category() と同等 個別投稿ページ・ループ内
is_category() 現在のページがカテゴリーアーカイブか テンプレート全体
has_term() 投稿が指定タクソノミーのタームを持つか カスタムタクソノミーにも対応

関連記事:個別投稿ページで特定カテゴリーのみ要素を表示・非表示にする方法特定のカテゴリーを指定して条件分岐を実装する方法

WP_Query でカテゴリー条件を指定して記事を取得する

特定のカテゴリーに属する記事を一覧で取得するには、WP_Query のカテゴリーパラメータを使います。

カテゴリー指定の方法(4パターン)
<?php
// パターン1: カテゴリーIDで指定(子カテゴリー含む)
$query = new WP_Query( array(
    'cat' => 5,
) );

// パターン2: スラッグで指定
$query = new WP_Query( array(
    'category_name' => 'wordpress',
) );

// パターン3: 複数カテゴリー(OR条件)
$query = new WP_Query( array(
    'category__in' => array( 5, 12, 23 ),  // いずれかに属する
) );

// パターン4: 複数カテゴリー(AND条件)
$query = new WP_Query( array(
    'category__and' => array( 5, 12 ),     // 両方に属する
) );
?>
特定カテゴリーを除外 / カスタムタクソノミーで条件指定
<?php
// 特定カテゴリーを除外
$query = new WP_Query( array(
    'category__not_in' => array( 1 ),  // 未分類を除外
) );

// tax_query: カスタムタクソノミーで条件指定
$query = new WP_Query( array(
    'tax_query' => array(
        array(
            'taxonomy' => 'genre',
            'field'    => 'slug',        // term_id / slug / name
            'terms'    => array( 'sf', 'fantasy' ),
            'operator' => 'IN',         // IN / NOT IN / AND / EXISTS
        ),
    ),
) );
?>
パラメータ 説明
cat int カテゴリーID(子カテゴリーの記事も含む)
category_name string カテゴリースラッグ(カンマ区切りでOR)
category__in array 指定IDのいずれかに属する記事(OR)
category__not_in array 指定IDを除外
category__and array 指定IDのすべてに属する記事(AND)
tax_query array カスタムタクソノミー対応の高度な条件指定

関連記事:特定のカテゴリーの投稿を表示する方法記事一覧から特定のカテゴリーを除外する方法WP_Queryで複雑な条件検索を実装する方法

pre_get_posts でメインクエリのカテゴリーを制御する

WP_Queryで新しいクエリを作るのではなく、WordPressのメインクエリ自体を変更したい場合は、pre_get_posts フックを使います。functions.php に記述します。

functions.php:トップページから特定カテゴリーを除外
<?php
function exclude_category_from_home( $query ) {
    // 管理画面・サブクエリは対象外
    if ( is_admin() || ! $query->is_main_query() ) {
        return;
    }

    // トップページから「お知らせ」カテゴリー(ID: 10)を除外
    if ( $query->is_home() ) {
        $query->set( 'category__not_in', array( 10 ) );
    }

    // 検索結果を特定カテゴリーに限定
    if ( $query->is_search() ) {
        $query->set( 'cat', '5,12,23' );
    }
}
add_action( 'pre_get_posts', 'exclude_category_from_home' );
?>

⚠ 注意:is_admin()is_main_query() のチェックを必ず入れてください。これを忘れると管理画面やウィジェットなど、すべてのクエリに影響します。

関連記事:特定のカテゴリを除外した記事一覧を表示する方法特定のカテゴリーだけ検索対象から除外する方法

カテゴリーに応じたスタイル変更

カテゴリーのスラッグをCSSクラスに利用すると、カテゴリーごとにデザインを切り替えることができます。

カテゴリースラッグでCSSクラスを付与
<?php
// 方法1: body_class() を利用(自動的にカテゴリークラスが付く)
// <body class="single category-wordpress category-5">

// 方法2: 手動でカテゴリースラッグをクラスに追加
$categories = get_the_category();
$cat_classes = '';

if ( $categories ) {
    $slugs = array_map( function( $cat ) {
        return 'cat-' . esc_attr( $cat->slug );
    }, $categories );
    $cat_classes = implode( ' ', $slugs );
}
?>

<!-- テンプレートでの使用 -->
<article class="post-card <?php echo $cat_classes; ?>">
    ...
</article>
style.css でカテゴリー別スタイル
/* カテゴリーごとのアクセントカラー */
.cat-wordpress .post-title { color: #21759b; }
.cat-javascript .post-title { color: #f7df1e; }
.cat-php .post-title { color: #777bb4; }

/* カテゴリーラベルのバッジスタイル */
.category-badge {
    display: inline-block;
    padding: 2px 10px;
    border-radius: 12px;
    font-size: 12px;
    font-weight: 600;
    color: #fff;
}

関連記事:カテゴリーごとに異なるデフォルトのサムネイル画像を表示する方法

実践パターン集

パターン1:カテゴリーラベルをバッジ風に表示

カテゴリーバッジの実装
<?php
/**
 * カテゴリーをバッジ風に表示するヘルパー関数
 */
function display_category_badges( $post_id = null ) {
    $categories = get_the_category( $post_id );

    if ( empty( $categories ) ) return;

    echo '<div class="category-badges">';
    foreach ( $categories as $cat ) {
        printf(
            '<a href="%s" class="category-badge cat-%s">%s</a>',
            esc_url( get_category_link( $cat->term_id ) ),
            esc_attr( $cat->slug ),
            esc_html( $cat->name )
        );
    }
    echo '</div>';
}
?>

パターン2:同じカテゴリーの関連記事を表示

同カテゴリーの関連記事
<?php
$categories = get_the_category();

if ( $categories ) {
    $related = new WP_Query( array(
        'category__in'   => array( $categories[0]->term_id ),
        'post__not_in'   => array( get_the_ID() ),  // 現在の記事を除外
        'posts_per_page' => 5,
        'orderby'        => 'rand',
    ) );

    if ( $related->have_posts() ) {
        echo '<h3>関連記事</h3><ul>';
        while ( $related->have_posts() ) {
            $related->the_post();
            printf(
                '<li><a href="%s">%s</a></li>',
                get_permalink(),
                get_the_title()
            );
        }
        echo '</ul>';
        wp_reset_postdata();
    }
}
?>

パターン3:カテゴリーごとのアイコン付きパンくずリスト

簡易パンくずリスト
<?php
function simple_breadcrumb() {
    if ( ! is_single() ) return;

    $categories = get_the_category();
    if ( empty( $categories ) ) return;

    $cat = $categories[0];
    $ancestors = array_reverse( get_ancestors( $cat->term_id, 'category' ) );

    echo '<nav class="breadcrumb">';
    echo '<a href="' . home_url() . '">ホーム</a> > ';

    // 祖先カテゴリーを表示
    foreach ( $ancestors as $ancestor_id ) {
        $ancestor = get_category( $ancestor_id );
        printf(
            '<a href="%s">%s</a> > ',
            esc_url( get_category_link( $ancestor_id ) ),
            esc_html( $ancestor->name )
        );
    }

    // 現在のカテゴリー
    printf(
        '<a href="%s">%s</a> > ',
        esc_url( get_category_link( $cat->term_id ) ),
        esc_html( $cat->name )
    );

    // 記事タイトル
    echo '<span>' . get_the_title() . '</span>';
    echo '</nav>';
}
?>

パフォーマンスの注意点

注意点 説明 対策
get_the_category() のキャッシュ 内部でオブジェクトキャッシュを使用 同一リクエスト内で何度呼んでも重複クエリは発生しない
ループ内のWP_Query ループの中でnew WP_Queryすると重い ループ外で一度取得し、結果をキャッシュする
orderby=rand 大量記事でORDER BY RAND()は遅い Transient APIでキャッシュするか、IDを先に取得してシャッフル
wp_reset_postdata() の忘れ カスタムクエリ後にグローバル$postがずれる WP_Query使用後は必ず wp_reset_postdata() を呼ぶ

トラブルシューティング

症状 原因 対処法
get_the_category() が空の配列を返す ループ外で呼んでいる / カテゴリー未設定 投稿IDを引数に渡すか、ループ内で使用する
「未分類」が表示される 投稿のカテゴリーが「未分類」のみ 除外するか、未分類カテゴリーの名前を変更する
カスタムタクソノミーが取得できない get_the_category() はcategoryのみ対応 get_the_terms() か wp_get_post_terms() を使う
カテゴリーリンクが404になる パーマリンクの更新が必要 管理画面 → 設定 → パーマリンクで「変更を保存」
get_the_terms() がWP_Errorを返す 存在しないタクソノミーを指定 is_wp_error() でチェックしてから使用する
子カテゴリーの記事が取得できない category__in は直接属するもののみ cat パラメータを使うか、子カテゴリーIDも含める

どの関数を使うべきか?選び方ガイド

カテゴリー取得関数が多くて迷う場合は、以下のフローで判断できます。

Q1. 投稿に紐づくカテゴリー? それとも全カテゴリー一覧?
全カテゴリー一覧:Q2 へ
→ 投稿に紐づくカテゴリー:Q3 へ
Q2. HTMLをそのまま出力したい?データを加工したい?
HTMLリストで出力wp_list_categories()
→ データを配列で取得:get_categories()
Q3. カスタムタクソノミーにも対応が必要?
はいget_the_terms() / wp_get_post_terms()
→ 標準カテゴリーのみ:Q4 へ
Q4. HTMLリンクを直接出力?データとして取得?
HTML直接出力the_category()
→ データとして取得:Q5 へ
Q5. ID だけで十分?オブジェクト全体が必要?
IDだけwp_get_post_categories()
→ オブジェクト全体:get_the_category()

まとめ

やりたいこと 使う関数
投稿のカテゴリーを取得(オブジェクト) get_the_category()
カテゴリーリンクを直接出力 the_category()
全カテゴリー一覧を取得 get_categories()
カテゴリーIDの配列で取得 wp_get_post_categories()
カスタムタクソノミーのターム取得 get_the_terms() / wp_get_post_terms()
投稿がカテゴリーに属するか判定 in_category() / has_category()
カテゴリーで記事を検索 WP_Query + cat / category__in
親カテゴリーを辿る get_ancestors() / get_category_parents()

基本は get_the_category() でカテゴリーオブジェクトを取得し、name・slug・term_id などのプロパティを活用する形です。カスタムタクソノミーを扱う場合は get_the_terms()、カテゴリーで記事を絞り込む場合は WP_Query のカテゴリーパラメータを使います。

関連記事:特定のカテゴリー名をリンク付きで表示する方法特定のカテゴリーの投稿を表示する方法記事一覧から特定のカテゴリーを除外する方法WP_Queryで複雑な条件検索を実装する方法