2026年6月23日
2026年6月23日
WordPressで記事のカテゴリーが正しく表示されないときの原因と修正方法
記事に付けたはずのカテゴリーが「未分類」のまま表示される、一覧に違うカテゴリー名が出る、カテゴリーページに関係のない記事が並ぶ、記事数の表示が合わない、といった症状は、多くの場合「保存されている値」と「テーマが表示している値」のどちらがずれているかを調べると原因に行き着きます。この記事では、その見分け方と、起きやすい原因ごとの確認方法・直し方を説明します。カテゴリーページそのものが404になる・真っ白になる問題は扱わず、表示される内容が正しくない場合に絞っています。
まず「保存」と「表示」のどちらがずれているかを確かめる
最初に、データベースに保存されているカテゴリーを確認します。管理画面の「投稿」→「投稿一覧」で、該当記事のカテゴリー列を見るのが手軽です。WP-CLIが使える場合は、記事IDを指定して直接確認できます。
wp post term list 123 category --fields=term_id,name,slug
ここで期待どおりのカテゴリーが出ていれば、保存は正常で、表示側(テーマ・キャッシュ・クエリー)の問題です。期待と違うカテゴリーが出ていれば、保存の段階で問題が起きています。この区別をせずにテーマを触り始めると、遠回りになりがちです。
表示側を詳しく調べるときは、Query Monitor プラグインが役立ちます。カテゴリーページを開いた状態で、メインクエリーの条件や実行されたSQLを管理バーから確認できます(画面の構成はバージョンによって変わります)。
原因1: キャッシュが古い表示を返している
カテゴリーを変更したのに表示が変わらない場合、最初に疑うのはキャッシュです。ページキャッシュ系のプラグイン、サーバーのキャッシュ機能、CDNのどこかに、変更前のHTMLが残っていることがあります。ログインした状態では最新の表示になり、ログアウトすると古い表示になる場合は、キャッシュが原因である可能性が高いです。
キャッシュ系プラグインの設定画面からキャッシュを削除し、レンタルサーバーのキャッシュ機能を使っている場合はその管理画面からも削除します(メニュー名はサーバー会社ごとに異なります)。オブジェクトキャッシュを使っている環境では、wp cache flush で消せます。
原因2: テーマが最初の1つしか表示していない
記事に複数のカテゴリーを付けているのに、一覧や記事上部には1つしか出ない場合、テーマが意図的に最初の1つだけを表示していることがよくあります。クラシックテーマでは、get_the_category() が返す配列の先頭だけを使うコードが典型です。
$cats = get_the_category();
if ( ! empty( $cats ) ) {
echo esc_html( $cats[0]->name );
}
どれが「先頭」になるかは保存の順番などで決まるため、期待と違うカテゴリーが出ることがあります。すべてを出したいなら the_category( ', ' ) に置き換えるか、表示したいカテゴリーを選べる仕組みを使います。Yoast SEO には「主要カテゴリー」を指定する機能があり、パンくずリストなどに使われますが、テーマの一覧表示がそれに従うかはテーマ次第です。テーマのファイルを直す場合は、子テーマにコピーしてから編集してください。
原因3: カテゴリーページに子カテゴリーの記事が混ざる
親カテゴリーのページに、子カテゴリーにだけ属する記事も並ぶのは、WordPressの標準の動作です。不具合ではありませんが、親カテゴリーに直接属する記事だけを出したい場合は、子テーマの functions.php でメインクエリーを調整します。
add_action( 'pre_get_posts', function ( $query ) {
if ( is_admin() || ! $query->is_main_query() || ! $query->is_category() ) {
return;
}
// 子カテゴリーを含めず、表示中のカテゴリーに直接属する記事だけにする
$query->set( 'category__in', array( $query->get_queried_object_id() ) );
} );
category__in は子カテゴリーを含めずに絞り込む指定です。is_main_query() で条件を付けておかないと、サイドバーの新着記事など他の一覧まで変わってしまいます。
原因4: テンプレート内のクエリーがカテゴリーを引き継いでいない
カテゴリーページなのに、すべての記事や最新記事が並ぶ場合は、テンプレートが独自のクエリーで記事を取り直している可能性があります。
クラシックテーマでは、category.php や archive.php の中で new WP_Query() を使い、カテゴリーの条件を渡していないケースが典型です。表示中のカテゴリーで絞りたいなら、メインループ(have_posts() と the_post())をそのまま使うか、'cat' => get_queried_object_id() を条件に加えます。
ブロックテーマでは、サイトエディターでカテゴリー用やアーカイブ用のテンプレートを開き、クエリーループブロックの設定を確認します。テンプレートのクエリーを引き継ぐ設定(バージョンによって、切り替えスイッチや「クエリータイプ」の選択として表示されます)がオフになっていると、どのカテゴリーページでも同じ記事が並びます。
原因5: カテゴリーが保存されていない
最初の確認で保存自体が違っていた場合は、編集画面を見直します。ブロックエディターでは、右側の設定パネルの「投稿」タブにあるカテゴリーの欄でチェックが入っているかを確認し、更新ボタンを押したあとに再読み込みして残っているかを見ます。どのカテゴリーにもチェックが無い記事は、「設定」→「投稿設定」の「投稿用カテゴリーの初期設定」に指定したカテゴリー(標準では「未分類」)として保存されます。
カスタム投稿タイプでカテゴリー欄が出ない場合は、投稿タイプの登録時に taxonomies に category が含まれているか、ブロックエディターで使う場合は show_in_rest が true になっているかを確認します。プラグインで投稿タイプを作っている場合は、そのプラグインの設定画面で同じ項目を探します。
原因6: 記事数の表示が実際と合わない
カテゴリーウィジェットや管理画面の「カテゴリー」一覧の記事数が実際と違う場合は、保存されているカウントがずれています。データの移行や、データベースを直接書き換える作業のあとに起きやすい症状です。WP-CLIで数え直せます。実行前にデータベースのバックアップを取ってください。
wp term recount category
なお、カウントは公開済みの記事を数えるため、下書きや予約投稿の記事は含まれません。
作業前の注意
テーマのファイルやfunctions.phpの変更、WP-CLIでのデータベース操作は、ファイルとデータベースのバックアップを取り、可能ならステージング環境で試してから本番に反映してください。管理画面やサイトエディターの表記は、WordPressのバージョンによって変わることがあります(2026年10月現在)。
まとめ
- 最初に
wp post term listや投稿一覧で、保存されているカテゴリーを確認する - 保存が正しければ、キャッシュ、テーマの表示方法、テンプレートのクエリーの順に調べる
- 親カテゴリーページに子カテゴリーの記事が出るのは標準の動作で、
pre_get_postsとcategory__inで調整できる - カスタム投稿タイプでは
taxonomiesとshow_in_restを確認する - 記事数のずれは
wp term recount categoryで数え直す