KH-WEBLOG TOP > WEBメモ > PHP > WordPressの投稿編集画面で子カテゴリを持つ親カテゴリだけ非表示にする方法

WordPressの投稿編集画面で子カテゴリを持つ親カテゴリだけ非表示にする方法

WordPressの投稿編集画面では、カテゴリが増えてくると選択欄が見づらくなりやすく、運用担当者が誤って親カテゴリまでチェックしてしまうことがあります。特に「実際に選択してほしいのは子カテゴリだけ」という運用にしているサイトでは、親カテゴリが一覧に表示されていることで、入力ミスや分類ルールのブレが起こりやすくなります。

そのような場合は、投稿編集画面のカテゴリ欄で「子カテゴリを持つ親カテゴリだけを非表示」にすると、管理画面がかなり分かりやすくなります。この記事では、functions.phpにコードを追加して、カテゴリ選択欄の見た目を整理する方法を解説します。

コーディング・WordPress化作業を代行します

このカスタマイズでできること

今回のカスタマイズを入れると、投稿編集画面のカテゴリ欄で、子カテゴリを持っている親カテゴリを非表示にできます。子カテゴリ自体はそのまま表示されるため、実際に投稿へ設定したいカテゴリだけを選びやすくなります。

たとえば、カテゴリ構成が次のようになっている場合を考えます。

  • お知らせ
    • 新着
    • メディア掲載
  • 商品情報
    • グラス
    • ギフト
  • 単独カテゴリ

通常は管理画面のカテゴリ欄に、親カテゴリも子カテゴリもすべて表示されます。しかし今回のコードを入れると、子カテゴリを持つ親カテゴリだけが非表示になり、以下のような見え方になります。

  • 新着
  • メディア掲載
  • グラス
  • ギフト
  • 単独カテゴリ

つまり、「お知らせ」「商品情報」は非表示になり、実際に選んでほしい子カテゴリだけが残る形です。

なぜこの方法が便利なのか

WordPressではカテゴリを階層化できるため、情報整理にはとても便利です。ただし、投稿者が毎回カテゴリを選ぶ運用では、親カテゴリまで見えていると迷いやすく、分類が統一されにくくなります。

たとえば本来のルールが「投稿には必ず子カテゴリだけを付ける」なのに、管理画面上で親カテゴリも選べてしまうと、投稿ごとに設定がばらつく原因になります。結果として、一覧ページや関連記事の出し分け、テーマ側の条件分岐、SEO上の設計などにも影響が出ることがあります。

そこで、管理画面上のカテゴリ表示を少し調整し、投稿者が迷わないようにすることで、運用ミスを減らしやすくなります。しかも今回の方法は、PHPでカテゴリの構造そのものを変えるわけではなく、管理画面の見た目だけを調整するため、比較的安全に導入しやすいのが特徴です。

追加するコード

以下のコードをテーマの functions.php に追加します。管理画面の投稿編集画面で、子カテゴリを持つ親カテゴリだけを非表示にする処理です。

add_action('admin_footer-post.php', 'my_hide_parent_categories_in_admin');
add_action('admin_footer-post-new.php', 'my_hide_parent_categories_in_admin');

function my_hide_parent_categories_in_admin() {
	$screen = get_current_screen();

	if (!$screen || $screen->base !== 'post') {
		return;
	}
	?>
	<script>
	document.addEventListener('DOMContentLoaded', function () {
		var checklists = document.querySelectorAll(
			'#categorychecklist, #categorychecklist-pop'
		);

		checklists.forEach(function(checklist) {
			var items = checklist.querySelectorAll('li');

			items.forEach(function(li) {
				// 子階層を持つ親カテゴリ
				var childList = li.querySelector(':scope > ul.children');
				if (childList) {
					li.style.display = 'none';
				}
			});
		});
	});
	</script>
	<?php
}

コードの仕組みを解説

このコードでは、WordPressの投稿編集画面のフッター部分に JavaScript を差し込んでいます。対象は「投稿編集画面」と「新規投稿追加画面」の2つです。

get_current_screen() を使って現在の管理画面を判定し、投稿画面以外では動かないようにしています。これにより、不要な画面への影響を防いでいます。

そのうえで JavaScript 側では、カテゴリチェックリストとして使われる #categorychecklist と #categorychecklist-pop を取得しています。これはクラシックエディタやクラシック形式のメタボックスで使われるカテゴリ一覧です。

各 li 要素の中に、直下の ul.children があるかどうかを確認し、もし存在すればそのカテゴリは「子カテゴリを持つ親カテゴリ」と判定します。そして、その li 自体を display:none; で非表示にしています。

つまりこのコードは、カテゴリの階層構造を解析して親カテゴリを見つけ、管理画面上だけでそのカテゴリを隠している、という仕組みです。

実際の表示イメージ

たとえば、次のようなカテゴリ設計をしているとします。

  • お知らせ
    • 新着
    • キャンペーン
    • メディア掲載
  • 商品情報
    • 新商品
    • 定番商品
  • コラム

この場合、投稿編集画面では「お知らせ」「商品情報」は非表示となり、「新着」「キャンペーン」「メディア掲載」「新商品」「定番商品」「コラム」だけが見える形になります。

その結果、投稿者は投稿に付けるべき具体的なカテゴリだけを迷わず選べるようになります。カテゴリ設計を細かくしているサイトほど、この調整の効果を感じやすいはずです。

導入時の注意点

この方法はとても手軽ですが、あくまで「管理画面の見た目を隠す」対応です。カテゴリ自体が削除されるわけではありませんし、データ構造が変更されるわけでもありません。

そのため、すでに親カテゴリが付与されている投稿があれば、その投稿データまでは自動で修正されません。また、インポートツールや一括編集、REST API など別経路でカテゴリを付与している場合には、親カテゴリが付いたまま保存される可能性があります。

管理画面を見やすくする目的としては十分有効ですが、運用ルールをさらに厳密にしたい場合は、保存時に親カテゴリを自動的に除外する追加処理を入れる方法も検討するとよいでしょう。

この方法が向いているケース

今回のカスタマイズは、特に次のようなサイトに向いています。

  • 親カテゴリは分類の箱として使い、実際の投稿には子カテゴリだけを付けたいサイト
  • 複数人で投稿を更新していて、カテゴリ選択ミスを減らしたいサイト
  • カテゴリ数が増えて管理画面の選択欄が見づらくなっているサイト
  • テーマや一覧ページの仕様上、末端カテゴリだけを正確に付けてほしいサイト

逆に、親カテゴリも投稿ごとに付与したい運用の場合は、この方法は向いていません。あくまで「親カテゴリは選ばせたくない」という前提がある場合に使うのが適切です。

functions.phpに入れる際のポイント

サイトによっては管理画面のカテゴリUIを独自カスタマイズしている場合があり、その場合は対象となるHTML構造が異なることがあります。もし思ったように動かない場合は、ブラウザの開発者ツールでカテゴリ欄の構造を確認し、対象セレクタが合っているかを見直すのが有効です。

まとめ

WordPressの投稿編集画面でカテゴリ欄が見づらい場合は、子カテゴリを持つ親カテゴリだけを非表示にすることで、運用しやすさを大きく改善できます。特に「投稿には子カテゴリだけを付ける」というルールでサイトを管理している場合、この方法はとても相性が良いです。

今回の方法は、カテゴリのデータ構造には触れず、管理画面の見た目だけを調整するシンプルな実装です。大がかりな改修をせずに導入しやすいため、まずは手軽な管理画面改善として試しやすい方法といえるでしょう。

カテゴリ運用のルールをより徹底したい場合は、今後さらに「親カテゴリが保存時に自動で外れる仕組み」や「特定の投稿タイプだけに適用する仕組み」を追加していくのもおすすめです。まずは今回のコードで管理画面を整理し、投稿者が迷わず使える状態を作ることが、運用の安定化につながります。

コーディング・WordPress化作業を代行します

PHPのおすすめ参考書

楽天ブックス
¥3,740 (2026/03/09 22:48時点 | 楽天市場調べ)

TAGS

.htaccess ActionScript All in one seo pack Contact Form 7 CSS CSS3 EC-CUBE Flash HTML HTML5 JavaScript jQuery LightBox PHP RSS SEO WordPress アイキャッチ画像 アクセス解析 カスタムフィールド カテゴリー カラーミーショップ カート コメント ショートコード テンプレートタグ ドロップダウンメニュー パーマリンク フォーム フルスクリーン ブログカード プラグイン ページテンプレート ページナビ ページ分割 マウスイベント リダイレクト リンク リンクカード レンタルサーバー ロールオーバー 携帯サイト 条件分岐 正規表現 関連記事