Menu Backup & Restore + Import/Export
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_navigation posts 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!”
Museder RestoreOne
Museder RestoreOne lets you create complete WordPress backups (database + wp-content) as a single archive, and restore them in a guided 3-step wizard. It is designed for shared hosting environments and uses WordPress APIs for database backup/restore, with archive compression handled by ZipArchive or WordPress’ bundled PclZip. Key features One-click full-site backup Export the database, meta.json, and wp-content/ into a single archive you can download or restore later. Restore Center wizard A clear 3-step flow: upload & analyze → review summary & options → start restore with real-time progress and logs. Chunked uploads with validation Bypass upload_max_filesize / post_max_size limits by uploading your archive in small chunks, with retries and integrity checks. Shared-hosting friendly Uses pure PHP + WordPress APIs for database backup/restore, and falls back from ZipArchive to PclZip compression when needed. Schedules and logs Create one or more automatic backup schedules (or run backups manually), then inspect, download, or clean up structured backup and restore logs. Neo-glass admin UI Modern Dashboard, Backups, Restore, Schedules, Logs and Settings screens with clear calls-to-action, status messages, and responsive layout. Multisite This release is not formally tested on WordPress Multisite. For predictable results, use RestoreOne on standard single-site installs (one site per admin context). If you run a network, treat use as experimental until you have verified backups and restores on a staging clone. External services This plugin does not use external services. The only programmatic outbound HTTP the base plugin performs by default is an optional, short non-blocking request to your own site’s wp-cron.php (same host / local loopback) to encourage scheduled tasks to run. No third-party API is called for backups or restores. All admin JavaScript and CSS for RestoreOne are loaded from files shipped under this plugin’s assets/ directory (including vendored libraries under assets/vendor/). Optional add-ons, if you install them separately, may introduce their own network behavior; see each add-on’s readme. See the FAQ for more on the local wp-cron.php nudge. Privacy What this plugin stores on your server Backups — Complete-site archives are written under your WordPress uploads area (typically wp-content/uploads/museder-restoreone/backups/ or the path shown on the Backups screen). Each archive contains a database export (database.ndjson), meta.json, and a copy of wp-content/ from your site at backup time. Logs — Text logs for backup, restore, and related operations are stored under wp-content/uploads/museder-restoreone/logs/ (see the Logs admin screen). Restore reports — When you generate a restore report, files are stored under wp-content/uploads/museder-restoreone/reports/ (or the path configured for reports on your install). Schedules and settings — Options and scheduled events are stored in your WordPress database like other plugins. Diagnostics Version / build heartbeat — After an upgrade, the plugin may write a one-line informational entry to the local Logs directory (same server, no remote host) noting the active plugin version and build id. This is for support troubleshooting only. Exact folder names may vary with your uploads path or custom content directory; nothing is sent to a fixed external hostname by this plugin. The plugin resolves these locations using WordPress APIs (for example wp_upload_dir() and path helpers derived from your install) rather than hard-coded internal constants, so custom wp-content or uploads layouts can be reflected correctly where your host allows. Third parties The free plugin does not upload your backup contents, database, or logs to third-party APIs or clouds. That statement matches External services above and the FAQ entries on external data and local wp-cron loopback. Optional add-ons (separate plugins or extensions, if you install and activate them) could send specific categories of data to remote storage or services only when you enable and configure those extensions; the base RestoreOne plugin does not do that on its own. Retention and deletion You can delete backup archives from the Backups screen, remove or download logs from Logs, and adjust retention-related options where provided. Uninstall (uninstall.php) removes plugin-owned options, transients (including timeout rows), dynamic job-lock option rows, and scheduled cron hooks whose names start with museder_restoreone_. It does not delete backup ZIP archives, log files, restore reports, or other files under your uploads/storage tree; delete those manually from the Backups / Logs UI or your host if you no longer need them. On Multisite, uninstall walks sites in batches (100 IDs per query) instead of loading the entire network at once. Very large networks should still use a maintenance window so uninstall is not interrupted by web-server timeouts. Developer Development source of truth is the public GitHub repository: https://github.com/artherslin-source/museder-restoreone Contributors and release maintainers should follow the Modification & Release SOP (docs/SOP-PLUGIN-DEVELOPMENT-AND-RELEASE.md in the repo). Summary: Branching: work on fix/, feature/, or agent/ branches from current main; avoid long-lived dirty main. WordPress.org Lite: fully functional, GPL, no license gates, trialware, or bundled Add-on/PRO code in the Lite package or SVN. Security: every sensitive AJAX/REST/form handler needs capability checks, nonces, sanitize/validate input, and escaped output. Release version sync (six fields, same version): museder-restoreone.php Version, MUSEDER_RESTOREONE_VERSION, MUSEDER_RESTOREONE_BUILD_ID, readme.txt Stable tag, new Changelog block, and new Upgrade Notice block (easy to forget — WP.org shows the notice to updaters). Package Lite ZIP: use create-package.sh or tools/package-lite-windows.ps1 only; require BOUNDARY_CHECK=PASS. Do not use PowerShell Compress-Archive. Lite ZIP must not include docs/, tools/, .cursor/, .github/, logs/, or museder-restoreone-pro/. GitHub release: after explicit approval, tag vX.Y.Z on main; GitHub Actions builds release artifacts. WordPress.org SVN: commit Lite source files only (no zip); copy trunk to tags/X.Y.Z; fill docs/RELEASE-X.Y.Z-SVN-HANDOFF.md from the template before SVN commit. Checklists: docs/RELEASE_CHECKLIST.md, docs/PACKAGING.md, docs/WORDPRESS_ORG_DEVELOPMENT_GUIDE.md, AGENTS.md.