Description
Menu Backup & Restore protects every WordPress menu, both classic nav_menu menus and block-theme wp_navigation posts edited in the Site Editor, with automatic backups, one-click restoration, and powerful import/export capabilities. Transfer menus between sites seamlessly with intelligent per-item mapping that rewrites page, post, and category references for the target site.
Key Features
- Automatic backup of menus when they are updated
- Works with both classic menus (
nav_menu) and block-theme menus (wp_navigationposts edited in the Site Editor) - Site Editor inspector panel — back up, restore, rename, or apply a backup from another menu without leaving the editor, with a Navigation block selected
- In-place restore replaces the existing menu directly, no duplicate menus, theme locations stay assigned
- Import and export menus as JSON files for portability or locally saved backups
- Multi-menu export and import — select multiple menus or backups to export in a single file
- Transfer menus between sites with intelligent object mapping, can be used to update menus from development to production sites without full site migration
- Manual mapping interface to override automatic matches and map menu items to specific pages, posts, or taxonomies during import
- Preserves complete menu structure: hierarchy, theme locations, CSS classes, and third-party plugin data (post_meta) icons etc…
- Bulk actions — select multiple backups to export or delete at once
- Rename backups inline with a click
- Configurable maximum number of backups to keep
- See who saved and created the backup
- Tab-based interface for better organisation
- Simple and intuitive user interface
- No database modifications required
- Lightweight and fast
How It Works
- The plugin automatically creates a backup whenever you update a menu
- Backups are stored in the WordPress options table with complete menu structure (hierarchy, locations, CSS classes, custom post_meta)
- Manage backups from the legacy Menus page (classic themes), the Appearance Menu Backups page (block themes), or inline from the Site Editor inspector when editing a Navigation block — rename, export, delete, restore, or bulk-select
- Restore any previous version with a single click, the existing menu is updated in-place, keeping theme locations intact
- Export one or multiple menus as a single JSON file for portability or import to other sites
- Configure the maximum number of backups to keep in the settings
Requirements
- WordPress 5.0 or higher
- PHP 7.2 or higher
What Users Have to Say on Reddit
“That’s a super useful idea! Menus are so easy to wipe out by accident, and restoring from a full backup always feels like overkill. Nice work!”
“Really appreciate it, This will come in handy alot!”
“Oh man, I’ve done this before too. Lost a big menu while trying to rearrange items and it was gone in a click. Ended up re-building from scratch.
This plugin sounds like a lifesaver — surprised WordPress hasn’t built something like this in by default.”
“Kind of an automatic backup vs having to schedule one.”
“that’s a killer quality of life plugin wp’s missing so many of those “one click undo” features for common mistakes”
“Great idea! I do this more often than I care to admit. This needs to be in Core!”
“Dude I literally do this all the time and actually did it less than an hour ago. I hate how the WordPress menu isn’t stored normally. Thanks for this!”
Screenshots

[Classic] Backup & Restore tab on the Appearance Menus page. Automatic backups appear as a list with Rename, Restore, Export, and Delete actions. 
[Block] Site Editor inspector “Menu Backups” panel. Select a Navigation block and back up, restore, rename, or apply a backup from another menu, without leaving the editor. 
[Block] Appearance Menu Backups admin page. Every block menu on the site with expandable backup sub-lists and per-row actions. 
[Both] Import preview with per-item mapping. Each navigation item gets a target dropdown so page, category, and post references are rewritten for the destination site. 
[Both] Settings Menu Backups page. Independent backup caps for each system, with optional confirmation before older backups are removed.
Installation
- Upload the
menu-backup-restorefolder to the/wp-content/plugins/directory - Activate the plugin through the ‘Plugins’ menu in WordPress
- Go to Appearance > Menus (classic themes) or Appearance Menu Backups (block themes) to see the backup panel. In the Site Editor (block themes), select any Navigation block to access the inspector panel.
- Configure the maximum number of backups in Settings > Menu Backups
FAQ
-
How many backups can I keep?
-
You can configure the maximum number of backups to keep in the plugin settings. The default is 10 backups.
-
Where are the backups stored?
-
Backups are stored in the WordPress options table. No additional database tables are created.
-
Yes, you can restore any previous version of your menu with a single click. If the original menu still exists, it is updated in-place — the same menu ID is kept so your theme locations stay assigned. If the original menu was deleted, a new menu is created.
-
Yes! You can export one or multiple menus at once as a single JSON file and import it to the same or a different WordPress site. The plugin intelligently maps menu items to objects on the target site. You can also export individual backups from the Backup & Restore tab, or bulk-export multiple backups at once.
-
Yes! The Export tab lets you select multiple menus using checkboxes and export them all in a single JSON file. When importing, the preview page shows each menu in its own section with full mapping controls. Bulk export is also available on the Backup & Restore tab for backups.
-
Can I rename backups?
-
Yes! Click the pencil icon next to any backup name to rename it inline. Changes are saved instantly without a page reload.
-
Absolutely! Export a menu from one site and import it to another. The plugin will automatically attempt to match pages, posts, and categories by slug, GUID, or title. On the import preview screen, you have full control to manually map any menu item to a different page, post, or category on the target site, or keep it as a custom link.
-
Yes! Version 1.1.1 introduced a manual mapping interface on the import preview page. After uploading a menu, you’ll see a detailed mapping table where you can:
* Review automatic matches and change them if needed
* Map unmatched items to specific pages, posts, or taxonomies on your site
* Choose to keep any item as a custom link instead of linking to an object
* See which items were automatically matched vs. which need attentionThis gives you complete control over exactly how your imported menu will be structured.
-
What data is preserved during backup, restore, and import/export?
-
The plugin preserves all menu data including:
* Complete menu hierarchy (parent/child relationships)
* Theme menu locations (which theme position the menu is assigned to)
* CSS classes for each menu item
* Menu item titles, URLs, and descriptions
* Target and rel attributes
* Display order of menu items
* Custom post_meta from third-party plugins — any plugin that stores data on menu items via post_meta is supported automatically -
Any plugin that stores its menu item data in post_meta is automatically supported — no configuration needed. This has been tested with:
- If Menu – Visibility control for menus by Layered
- Menu Icons by ThemeIsle
- WP Menu Icons by QuadLayers
- Menu Image by Freshlight Lab
- Easy Menu Icons by Themewant
If your menu plugin stores data in post_meta (which most do), it will work out of the box.
-
Will this slow down my site?
-
No, the plugin is lightweight and only runs when menus are updated. It doesn’t affect your site’s performance.
Reviews
Contributors & Developers
“Menu Backup & Restore + Import/Export” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Menu Backup & Restore + Import/Export” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.4.0
- Block theme support — menus stored as
wp_navigationposts (used by the Site Editor) are now automatically backed up on save, and can be restored, exported, and imported with the same guarantees as classic menus - New admin page under Appearance Menu Backups (block themes only) that lists every block menu on the site, their backup counts, and per-backup Restore / Export / Delete / Rename actions. Hidden on classic themes since the legacy Appearance Menus page already covers classic backups
- Site Editor block inspector panel — select any Navigation block to back up, restore, or browse recent backups inline. Auto-refreshes after a Site Editor save; restore reloads the editor with the restored content. A confirmation warns before restoring if you have other unsaved changes
- Separate backup limits for classic and block menus — each system has its own cap so they don’t compete for slots. Configure both on Settings Menu Backups
- Optional confirmation before any save or backup action that would delete the oldest backup to make room. Toggle on or off in Settings Menu Backups
- Cross-system count notices — each backup surface tells you how many of the other system’s backups are stored elsewhere, so you don’t lose track of records after a theme switch
- “Back up all menus now” button (Appearance Menu Backups) backs up every menu of the active theme’s type in one click
- Import dropzone on the new admin page — imports JSON files and returns to the page you started from
- Schema 1.2 JSON format for exports containing block menus (mixed classic + block files supported). Readers accept schema 1.0, 1.1, and 1.2 files
- Block-menu backups preserve post_meta for third-party plugins that attach data to
wp_navigationposts - Classic Backup & Restore tab on the Nav Menus page is unchanged — block records are filtered out so classic users see no difference
- Block menu imports now offer per-item remapping — every navigation link in an imported block menu shows up in the preview with a dropdown of matching pages, categories, or other targets on this site. Auto-matches by ID, URL slug, and label across every public post type and taxonomy. Replaces the prior “imported verbatim, fix links yourself” behavior
- Apply a backup from another menu (Site Editor inspector) — pick any block menu’s backup and apply it to the currently-selected Navigation block. Useful for copying menu structure between menus without leaving the editor
- Inline rename of recent backups in the Site Editor inspector — pencil icon next to each backup name renames the backup record without leaving the editor
- “Back up now” saves first if you have unsaved menu edits — the inspector’s backup button implicitly dispatches a Site Editor save so the backup captures what you see, not the previous on-disk state. Same applies to “Back up every Navigation block on this page”
- Trim-warning confirm names the specific backup it will delete — when you’re at the backup limit, the confirmation tells you exactly which backup will be removed (name + date) instead of saying “the oldest backup”
- No more stacked “- Restored …” suffixes on menu names — repeated restores replace the marker rather than appending it. Auto-backups also strip prior markers when capturing the menu name, so backup display names stay clean
- Bulk select on the Appearance Menu Backups sublists — checkboxes per backup row plus Export Selected and Delete Selected buttons at the bottom of each sublist
- Open sublists stay open across actions — deleting or backing up on Appearance Menu Backups no longer collapses your expanded sublists; the page preserves expanded state across the reload
- Settings page gates the irrelevant cap — on block themes the classic-menu cap is grayed out (and vice versa). The “Manage your menu backups” link on the Settings page also adapts to your active theme
1.3.0
- Added custom post_meta support — third-party plugin data (e.g. If Menu, Menu Icons, mega-menu plugins) is now automatically preserved during backup, restore, import, and export
- In-place restore — restoring a backup now replaces the existing menu directly instead of creating a duplicate. Theme locations stay assigned, no cleanup needed
- Multi-menu export — select multiple menus on the Export tab and export them all in a single JSON file
- Multi-menu import — import files containing multiple menus, with per-menu mapping controls on the preview page
- Bulk backup actions — select multiple backups with checkboxes to export or delete them at once
- Inline backup rename — click the pencil icon to rename any backup without leaving the page
- Import preview now shows custom data keys (post_meta) per item so users know what third-party data is included
- New multi-menu JSON format (schema 1.1) while remaining fully backward compatible with old single-menu exports
- UI improvements — tighter spacing, clearer export tab description, responsive layout fixes
1.2.0
- Added a new Export tab to the Menus page, allowing you to export any menu directly as a JSON file. Menus can now be exported from your site even if they haven’t been backed up.
- Improved the Menus page tab experience so switching between Backup & Restore, Import, and Export feels instant without a full page reload, while restore, delete, import, and export actions keep their existing secure processing flow.
1.1.2
- Fixed PHP 8.1 deprecation warnings caused by passing null to add_submenu_page()
- Improved PHP 8.1+ compatibility across all admin interfaces and form handlers
- Fixed CSS not loading on import preview page – styles now properly apply
- Added max-width constraints (1200px) to import preview page for better readability on large screens
- Improved layout consistency for all tables, notices, and forms on import preview
- Synchronized dropdown widths between inline styles and CSS for uniform appearance
- Moved inline CSS to admin.css file for better code organization and performance
- Enhanced import preview page styling and user experience
1.1.1
- Added manual mapping interface on import preview page
- Users can now override automatic object matches during import
- Menu items can be manually mapped to specific pages, posts, or taxonomies on the target site
- Custom links can now be mapped to real pages/posts during import (not just kept as custom links)
- Human-readable type labels in import preview (shows “Post”, “Page”, “Product” instead of “post_type”)
- All mapping dropdowns now have uniform width for consistent UI
- Fixed PHP 8.1+ deprecation warnings related to URL parameter handling
- Fixed security warnings for POST data sanitization and validation
- Fixed tab navigation issue when no WordPress menus exist but backups are present
- Fixed bug where custom links mapped to pages weren’t being saved correctly
- Option to keep any menu item as a custom link instead of mapping to an object
- Improved import control and flexibility for cross-site menu transfers
1.1.0
- Added Import & Export functionality for menu backups as JSON files
- Added tab-based interface with “Backup & Restore” and “Import” tabs
- Smart tab defaults: Import tab shown first when no backups exist
- Improved empty state with actionable guidance for new users
- Added informational notice on Import tab when no backups exist
- Added “Buy Me a Coffee” support link on settings page
- Added “Rate 5 Stars” call-to-action on settings page
- Fixed backup panel appearing on Manage Locations tab
- Fixed bug where reducing backup limit didn’t delete old backups
- Imported menus are now automatically saved as backups
- Enhanced security with MIME type validation and checksum verification
- Improved cross-site menu transfer with intelligent object mapping
- Added schema versioning for future compatibility
1.0.1
- Added User column to show who created each backup
- Improved responsive layout on smaller screens and mobile for a better user experience
- Fixed H2 font size to match WordPress’s default H2 font size
- Added friendly notice when no backups exist
1.0.0
- Initial release
- Automatic menu backup on menu save
- Backup restoration
- Configurable backup limit
- Settings page
- User interface improvements
