2026年9月17日

2026年9月17日

WordPressのナビメニューが表示されないときの原因と直し方

WordPressでナビゲーションメニューが表示されない原因で最も多いのは、作ったメニューがテーマの「表示位置」に割り当てられていないことです。次いでブロックテーマのナビゲーションブロックの参照先、キャッシュ、CSSによる非表示、プラグインやテーマのコードの問題が続きます。この記事では、症状の見分け方と、原因を可能性の高い順に確認して直す手順を説明します。

テーマのファイルやデータベースに手を入れる前には、バックアップを取ってください。

まず症状を見分ける

直し方は「どう表示されないか」で変わります。最初に次の点を確認します。

  • メニューのあった場所が丸ごと空いているのか、固定ページの一覧など別の項目が並んでいるのか
  • パソコンでは見えるがスマートフォンでは見えない(またはその逆)のか
  • ログイン中は見えるが、ログアウトすると見えないのか
  • テーマ変更、プラグインの追加・更新、メニューの大幅な編集の直後から起きたのか

ブラウザの開発者ツール(多くのブラウザでF12)を開き、メニューがあるはずの場所のHTMLを確認すると切り分けが早くなります。HTMLにメニューの <ul> や <nav> が出ているのに見えないならCSSの問題、HTML自体が無いならメニューの割り当てやテンプレートの問題です。

使っているテーマがクラシックテーマかブロックテーマかも確認します。管理画面の「外観」に「エディター」があればブロックテーマ、「カスタマイズ」と「メニュー」が中心ならクラシックテーマです。

原因1:メニューが表示位置に割り当てられていない(クラシックテーマ)

クラシックテーマでは、メニューを作るだけでは表示されません。テーマが用意した表示位置(ヘッダー、フッターなど)に割り当てて初めて出力されます。

確認は「外観」→「メニュー」の画面で、メニューの位置の設定(または「位置の管理」タブ)を見ます。テーマを変更した直後に消えた場合はほぼこれが原因です。表示位置の名前や数はテーマごとに異なるため、前のテーマで割り当てていた設定は新しいテーマには引き継がれません。

WP-CLI が使える環境では、コマンドで確認と割り当てができます。

# 作成済みのメニューと、割り当て先の確認
wp menu list

# テーマが登録している表示位置と、割り当て状況
wp menu location list

# 「main-menu」というメニューを「primary」の位置に割り当てる(名前は環境に合わせる)
wp menu location assign main-menu primary

wp menu location list に表示位置が1つも出ない場合は、テーマが表示位置を登録していません。原因5を確認してください。

原因2:ナビゲーションブロックの参照先が変わった(ブロックテーマ)

ブロックテーマでは、メニューはヘッダーなどのテンプレートパーツに置かれた「ナビゲーション」ブロックで表示されます。メニューの中身は「wp_navigation」という投稿タイプとして保存され、ブロックはその1件を参照しています。

次のような場合に「メニューが消えた」「固定ページの一覧が並んでいる」という症状になります。

  • 参照していたナビゲーションを削除した、または別のナビゲーションを作って切り替えた
  • テンプレートパーツをリセットした
  • ナビゲーションが未設定のため、ブロックが固定ページの一覧などを代わりに表示している

「外観」→「エディター」→「ナビゲーション」で保存済みのメニューを確認し、ヘッダーのテンプレートパーツを開いてナビゲーションブロックを選び、右側の設定から表示したいメニューを選び直します。クラシックテーマ時代のメニューは、ナビゲーションブロックから取り込める場合があります。ここでの画面の表記は執筆時点のものです(2026年10月現在)。バージョンで変わることがあるため、見当たらない場合はブロックの設定パネル内を探してください。

原因3:CSSや画面幅の設定で見えなくなっている

HTMLは出ているのに見えない場合です。

  • スマートフォン幅ではハンバーガーボタンに切り替わる設定になっていて、ボタンが背景と同じ色で見えない
  • 追加CSSやテーマのカスタマイズで display: none が指定されている
  • ヘッダー画像やスライダーなど別の要素がメニューの上に重なっている(z-index や position の問題)

開発者ツールで該当要素を選び、適用されているCSSのうち display、visibility、opacity、z-index を確認します。ナビゲーションブロックには、どの画面幅でオーバーレイ表示(ハンバーガー)にするかの設定があるので、そちらも見てください。

原因4:キャッシュに古い表示が残っている

メニューを直したのに反映されない場合は、キャッシュを疑います。キャッシュ系プラグイン、サーバーのページキャッシュ、CDN、ブラウザのキャッシュの順に削除し、ログアウトした状態またはプライベートウィンドウで確認します。ログイン中はキャッシュを使わない設定のプラグインが多いため、「ログイン中だけ正しく見える」場合はこの可能性が高くなります。

ただし、ログイン状態によって項目を出し分けるプラグイン(ユーザーの役割ごとにメニュー項目を表示するものなど)を使っている場合は、その設定どおりの動作であることもあります。

原因5:テーマのコードで表示位置やメニューの呼び出しが欠けている

自作テーマや子テーマでヘッダーを上書きしている場合に起こります。クラシックテーマでメニューを表示するには、表示位置の登録とテンプレートでの呼び出しの両方が必要です。子テーマの functions.php の例です。

add_action( 'after_setup_theme', function () {
	register_nav_menus(
		array(
			'primary' => __( 'メインメニュー', 'my-child-theme' ),
		)
	);
} );

テンプレート(header.php など)では、次のように呼び出します。

<?php
if ( has_nav_menu( 'primary' ) ) {
	wp_nav_menu(
		array(
			'theme_location' => 'primary',
			'container'      => 'nav',
			'fallback_cb'    => false,
		)
	);
}
?>

theme_location の値が register_nav_menus で登録した名前と1文字でも違うと表示されません。また fallback_cb を false にしていると、メニューが割り当てられていないときに何も出力されないため、「割り当て忘れ」と同じ症状になります。子テーマで header.php をコピーして編集した場合は、親テーマの更新でメニューの呼び出し方が変わり、子テーマ側が古いまま残っていることもあります。

原因6:プラグインの競合やPHPエラーで出力が止まっている

ヘッダーの途中でページが途切れている、メニュー以降の要素も表示されていない場合は、PHPエラーで処理が止まっている可能性があります。ステージング環境、または一時的に wp-config.php で次の設定にしてエラーをログに記録します。

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

wp-content/debug.log に出たエラーのファイルパスから、原因のプラグインやテーマを特定します。確認が終わったら設定を元に戻し、ログファイルも削除してください。本番で全プラグインを止めずに切り分けたい場合は、自分のセッションだけでプラグインを無効化できる「Health Check & Troubleshooting」プラグインが便利です。

原因7:メニュー項目が保存されていない

項目数の多いメニューを保存したら、後半の項目が消えたという場合は、PHPの max_input_vars(一度に受け取れる入力項目の数)の上限に達している可能性があります。メニュー項目1つにつき複数の入力値が送られるため、大きなメニューでは上限を超えやすくなります。サーバーの設定で値を引き上げるか、メニューを分割します。設定の変更方法はサーバー会社のマニュアルを確認してください。

また、リンク先の固定ページを下書きや非公開に戻すと、その項目はログアウト時に表示されなくなります。

まとめ

  • 最初に、HTMLが出ていないのか、出ているのに見えないのかを開発者ツールで確認する
  • クラシックテーマでは表示位置への割り当て、ブロックテーマではナビゲーションブロックの参照先を確認する
  • 見えないだけならCSS、反映されないならキャッシュを疑う
  • 自作・子テーマでは register_nav_menus と wp_nav_menu の theme_location が一致しているかを見る
  • ページが途中で切れるならデバッグログでPHPエラーを確認する

お気軽にご相談ください

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