2026年5月20日

2026年5月20日

WordPressのカテゴリページが正しく表示されない場合の解決方法

はじめに

カテゴリページにアクセスすると404エラーになる、または投稿が表示されないケースは、パーマリンク設定の問題やテンプレートの適用ミスが主な原因です。段階的に確認して解決しましょう。

症状・原因

  • カテゴリページが404になる
  • カテゴリページにアクセスできるが投稿が表示されない
  • 一部のカテゴリだけ表示されない
  • テーマのカテゴリテンプレートが適用されていない

解決手順

ステップ1:パーマリンクを再保存(最初に試すこと)

wp rewrite flush --hard

管理画面からは「設定 → パーマリンク設定 → 変更を保存」でも同様の効果があります。パーマリンクのリライトルールが破損しているだけで解決することが多いです。

ステップ2:カテゴリのスラッグを確認

カテゴリのスラッグが category という単語と一致している場合、WordPress本体のルールと衝突します。

# カテゴリ一覧を確認
wp term list category --fields=term_id,name,slug

スラッグを変更するには、管理画面の「投稿 → カテゴリ」からスラッグを編集します。

ステップ3:カテゴリのベースURLを確認

設定 → パーマリンク設定 → オプション → カテゴリベース

カテゴリベースに誤った値が入っていると、すべてのカテゴリURLが壊れます。通常は空欄のままで問題ありません。

ステップ4:pre_get_postsで投稿が除外されていないか確認

カスタマイズによって pre_get_posts フィルターで特定の投稿タイプのみが絞り込まれている場合があります。

// 問題のある実装例(カテゴリページの投稿を除外してしまう)
add_action('pre_get_posts', function($query) {
    if ($query->is_main_query()) {
        // NG: is_home() チェックなしで投稿タイプを絞ると
        // カテゴリページにも影響する
        $query->set('post_type', ['post', 'product']);
    }
});

// 正しい実装(ホームページのみに限定)
add_action('pre_get_posts', function($query) {
    if ($query->is_main_query() && $query->is_home()) {
        $query->set('post_type', ['post', 'product']);
    }
});

ステップ5:テンプレートの適用順序を確認

WordPressはテンプレート階層に従いカテゴリテンプレートを選択します:

1. category-{slug}.php(例: category-news.php

2. category-{ID}.php(例: category-5.php

3. category.php

4. archive.php

5. index.php

category.php が存在しない場合は archive.php が使われます。テーマに category.php を作成するか、archive.php を編集します。

ステップ6:カテゴリに投稿が紐づいているか確認

# カテゴリに属する投稿数を確認
wp post list --category_name=ニュース --fields=ID,post_title,post_status

投稿のステータスが draftprivate になっていると、一般ユーザーには表示されません。

注意事項

  • exclude_from_searchtrue にしていてもカテゴリページには影響しません(検索除外とカテゴリ表示は別の設定)
  • カスタム投稿タイプのカテゴリは taxonomy パラメータが必要です

まとめ

カテゴリページの問題はまず wp rewrite flush --hard で解決することがほとんどです。解決しない場合は pre_get_posts フィルターの条件チェックと、テンプレート階層の確認を行ってください。

お気軽にご相談ください

お見積りへ お問い合わせへ