【WordPress】記事一覧から特定のカテゴリーを除外する方法

WordPressを使用していると、特定のカテゴリーを除外してホームページや特定のセクションに記事を表示したい場合があります。これは、ブログやウェブサイトのカスタマイズの一環として非常に一般的です。この記事では、WordPressの pre_get_posts フィルターおよび WP_Query を使用して、特定のカテゴリーを除外して記事を表示する方法について説明します。

pre_get_posts フィルターを使用する

// functions.php ファイルに追加するか、カスタムプラグインを作成します

function exclude_category_from_blog_query($query) {
    if ($query->is_home() && $query->is_main_query()) {
        $query->set('category__not_in', array(1, 2, 3)); // 1, 2, 3 は除外したいカテゴリーのIDです
    }
}

add_action('pre_get_posts', 'exclude_category_from_blog_query');

このコードは、pre_get_posts フィルターを使用してメインクエリを変更し、category__not_in パラメーターに除外したいカテゴリーのIDを指定します。

WP_Query を使用する

// カスタムループなどで使用する場合

$args = array(
    'category__not_in' => array(1, 2, 3), // 1, 2, 3 は除外したいカテゴリーのIDです
);

$query = new WP_Query($args);

// ループを開始する前に、記事があるかどうかを確認する
if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        // 記事のコンテンツを表示するコードを追加
    }
    wp_reset_postdata(); // ループが終わったら必ずリセットする
} else {
    // 記事がない場合の処理を追加
}

この方法では、新しい WP_Query インスタンスを作成し、category__not_in パラメーターに除外したいカテゴリーのIDを指定します。

まとめ

これらの手法を組み合わせて、特定のカテゴリーを除外してWordPressサイトの表示をカスタマイズすることができます。どちらの方法も効果的に利用することができるので、プロジェクトの要件に合わせて適切な方法を選択してください。