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エラーを確認する