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
投稿のステータスが draft や private になっていると、一般ユーザーには表示されません。
注意事項
exclude_from_searchをtrueにしていてもカテゴリページには影響しません(検索除外とカテゴリ表示は別の設定)- カスタム投稿タイプのカテゴリは
taxonomyパラメータが必要です
まとめ
カテゴリページの問題はまず wp rewrite flush --hard で解決することがほとんどです。解決しない場合は pre_get_posts フィルターの条件チェックと、テンプレート階層の確認を行ってください。