Skip to content
ThemesIonic — home
Troubleshooting

WordPress Menu Not Showing: Every Cause, in Order

A missing menu is usually an unassigned location, a cached page, or CSS hiding it at a certain width. Check assignment first, then markup, then styling.

4 min read beginner

Quick fix: open Appearance → Menus → Manage Locations. If the location your theme uses shows "— Select a menu —", that is the whole problem. Assign your menu, save, and reload with caches purged.

If the location is already assigned, work down the list below. Each step rules out one layer.

1. Confirm the theme location assignment

A menu can exist, contain items and still be attached to nothing. Location assignments are stored per theme, so switching or updating a theme, or restoring a backup, commonly leaves them empty.

Check both places:

  • Appearance → Menus → Manage Locations — the list of every location the theme registers.
  • Appearance → Customize → Menus — the same data, sometimes with a live preview that makes the result obvious.

If the location list is empty, the theme registers no menu locations at all. That is normal for block themes, covered further down.

2. Rule out caching

A cached copy of the header will keep showing the old navigation long after you fixed it. Purge in this order: page cache plugin, then host cache, then CDN, then browser. Test in a private window afterwards.

If the menu appears when logged in but not when logged out, it is almost certainly cache, since most page caches only serve anonymous visitors. The full sequence is in WordPress changes not showing.

3. Check whether the markup is in the page

Load the page logged out, view source, and search for a menu item's text.

Result Meaning
Text is not in the source The menu is not being rendered — template or assignment problem
Text is present but invisible CSS or JavaScript is hiding it — go to step 4
Only some items are present Items are set to a restricted role, or a plugin filters them

If the markup is missing and the location is assigned, the template may have been edited. A theme's header.php calls wp_nav_menu() with a theme_location; if that call was removed during customisation, nothing renders. Compare against a fresh copy of the parent theme.

4. Find the CSS or script hiding it

Open the inspector and locate the <nav> or <ul> element.

  • display: none at your current width means a media query is hiding the desktop menu and expecting a mobile toggle to take over.
  • height: 0 or overflow: hidden usually points at a dropdown script that never initialised.
  • z-index and position problems put the menu behind a hero image — it is there, just underneath.

Check the console for JavaScript errors. A single error from an unrelated plugin stops the theme's navigation script from running, which is why a menu often breaks right after installing something new.

If you added rules yourself, review them in how to add custom CSS to WordPress. Custom CSS survives theme updates, so an old rule written for a previous theme can quietly hide the new one's navigation.

5. Mobile-only failures

A mobile menu has three moving parts: the hidden list, the toggle button and the script that connects them. Test each:

  1. Narrow the desktop browser to phone width — the toggle should appear.
  2. Click it. If nothing happens, look for a console error.
  3. If the toggle itself is missing, the theme may require the menu to be assigned to a separate mobile location.

Optimisation plugins that defer or combine JavaScript are the most frequent cause of a toggle that does nothing. Disable JS combination, purge, and retest before changing anything else.

6. Block themes: navigation lives in the template

Block themes do not use Appearance → Menus. Navigation is a Navigation block placed inside the header template part.

To fix a missing menu:

  1. Go to Appearance → Editor.
  2. Open Patterns → Template Parts → Header.
  3. Select the Navigation block. If it is missing, add it, then pick an existing menu from the block's dropdown.
  4. Save the template part, not just the page.

A common surprise: editing navigation in one template part changes it everywhere that part is used, which is usually what you want but occasionally not. Background on the model is in what is a WordPress block theme.

7. Menu items missing rather than the whole menu

  • Items pointing at deleted pages are removed automatically.
  • Items restricted by a membership or role plugin disappear for visitors who lack the capability — test logged out.
  • WooCommerce cart or account links can be hidden by the store's own settings.
  • A menu with hundreds of items can exceed PHP's max_input_vars when saving, silently truncating it. Ask your host to raise the limit if a long menu loses items every time you save.

Verify the fix

Check the menu logged out, on a phone-width viewport, and on an interior page as well as the homepage — some themes use a different template for the front page. Once it renders correctly, review how to create a WordPress menu if you also want submenus, custom links or a second navigation area.

Frequently asked

No. Menus are stored independently of the theme, but the location assignment is per theme. Reassign the menu to the new theme's location under Appearance → Menus.
Either a CSS media query hides it and the toggle button is missing or broken, or a JavaScript error stops the mobile toggle from opening. Check the browser console on a narrow viewport.
Block themes have no Appearance → Menus screen by default. Navigation lives in a Navigation block inside a template part, edited through Appearance → Editor.

Related guides