Description
Swift Menu Duplicator gives you full control over your WordPress navigation menus. Clone any menu in one click, manage all menus from a dedicated admin page, version them with snapshots, move them across Multisite sub-sites, and automate everything from the command line or REST API.
One-Click Duplication
- Duplicate button right in the menu editor footer — no page reload required
- Full hierarchy preserved via a two-pass clone that remaps all parent-child item IDs
- All item metadata copied — type, object, URL, target, CSS classes, XFN, description
- Duplicate individual menu items directly from the menu editor
- Custom name support — filter
swift_menu_duplicator_new_menu_nameto override the default “(Copy)” suffix
Snapshot Revisions
- Auto-snapshot — a snapshot is saved automatically before every menu save
- Manual snapshots — save named snapshots from the menu editor at any time
- Browse & restore — view all snapshots in an expandable panel and restore with one click
- Housekeeping — delete individual snapshots you no longer need
Menu Manager (Appearance Menu Manager)
- Dedicated page listing every menu on the site in a sortable WP_List_Table
- Bulk duplicate — clone multiple menus at once
- Bulk export — download selected menus as a single ZIP archive
- Bulk delete — remove multiple menus in one action
- Row actions — duplicate or export individual menus directly from the list
JSON Export / Import
- Export any menu to a portable JSON file (via admin or REST API)
- Import from a JSON file upload or paste JSON directly into the text area
- URL find & replace — swap domain names during import for staging production migrations
- Dry-run preview — review what will be imported before making any changes to the database
Multisite Support
- Copy any menu to another site in your WordPress Multisite network
- Automatic URL rewriting in item URLs when copying across sub-sites
REST API
Full REST API at /wp-json/cmd/v1/ for headless and block-editor integrations:
POST /menus/{id}/duplicate— duplicate a menu (optionalnameparameter)GET /menus/{id}/export— export a menu as a JSON payloadPOST /menus/{id}/items/{item_id}/duplicate— duplicate a single menu item
Permission is controlled by the swmd_rest_permission filter (defaults to edit_theme_options).
WP-CLI
Full command-line support under the wp swift-menu-duplicator command group:
wp swift-menu-duplicator duplicate <menu-id> [--name=<name>]— duplicate a menuwp swift-menu-duplicator export <menu-id> [--output=<file>]— export to JSONwp swift-menu-duplicator import <file> [--name=<name>] [--find=<str>] [--replace=<str>] [--dry-run] [--porcelain]— import from JSONwp swift-menu-duplicator copy-to-site <menu-id> --target-blog=<id> [--name=<name>] [--find=<str>] [--replace=<str>]— copy to a sub-site
Multilingual Compatibility
- WPML — translation meta keys (
_icl_lang_duplicate_of,wpml_language, etc.) are stripped from duplicated items automatically - Polylang — language meta keys (
_pll_synced_taxonomies,_pll_menu_language, etc.) are stripped from duplicated items automatically - Additional keys can be excluded via the
swmd_compat_excluded_meta_keysfilter
Developer Hooks
swift_menu_duplicator_new_menu_name— customise the default duplicate nameswmd_rest_permission— control REST API accessswmd_before_duplicate_item/swmd_after_duplicate_menu_item— fired around item duplicationswmd_after_import_menu— fired after a successful importswmd_item_meta_keys— control which meta keys are copiedswmd_compat_excluded_meta_keys— extend the multilingual meta exclusion listwp_update_nav_menu— triggers auto-snapshot before every menu save
Security
- All AJAX actions verified with nonces and
edit_theme_optionscapability checks - All output escaped; all input sanitized
- Database queries use
$wpdb->prepare()— no string concatenation - REST API permission is filterable but defaults to
edit_theme_options - WordPress Filesystem API used for all file read/write/delete operations
Requirements
- WordPress 6.0 or higher
- PHP 7.4 or higher
- User with
edit_theme_optionscapability
Screenshots
Installation
- Upload the
swift-menu-duplicatordirectory to/wp-content/plugins/. - Activate the plugin through Plugins Installed Plugins.
- Go to Appearance Menus, select a menu, and click Duplicate Menu in the footer.
- For bulk management, snapshots, and import, visit Appearance Menu Manager.
FAQ
-
Does it copy theme location assignments?
-
No. Theme location assignments are site-specific and intentionally not copied, so the duplicate does not silently replace an active menu in any location.
-
All parent-child relationships are preserved exactly. The plugin uses a two-pass approach: items are cloned first, then parent ID references are re-mapped to the newly created item IDs.
-
Can I rename the duplicate before it is created?
-
Yes. A name field is shown in the duplicate modal. You can also change the default suffix globally by filtering
swift_menu_duplicator_new_menu_name. -
Is it compatible with WPML or Polylang?
-
Yes. Translation and language meta keys are automatically stripped from duplicated items so the copy starts as a clean, language-neutral menu.
-
Is it compatible with WooCommerce / HPOS?
-
Yes. The plugin only interacts with
nav_menu_itemposts and thenav_menutaxonomy. It has no dependency on WooCommerce or its High-Performance Order Storage. -
Yes. All items are duplicated regardless of their post status.
-
How do I use the REST API?
-
Authenticate with a cookie session or an Application Password, then send:
POST /wp-json/cmd/v1/menus/{menu_id}/duplicateThe response includes the new menu’s
id,name, andedit_url. -
Export the source menu to JSON (admin UI or
wp swift-menu-duplicator export), transfer the file, then import it on the target site. Use the find/replace fields to rewrite domain-specific URLs during import. -
What capability is required?
-
edit_theme_options for all duplication, snapshot, export, and import actions. Multisite copy-to-site additionally requires
manage_optionson the target sub-site.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Swift Menu Duplicator” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Swift Menu Duplicator” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.1
- Fix: WP-CLI command renamed from
wp menu-duplicatortowp swift-menu-duplicatorfor consistency with the plugin slug. - Fix:
composer.lockwas excluded by.gitignoreglob pattern causing the SVN deploy workflow to fail. - Fix: Short description trimmed to satisfy the WordPress.org 150-character limit.
- Tested up to WordPress 7.0.
1.0.0
- Initial release.
- One-click menu duplication from the WordPress menu editor with hierarchy preserved.
- Duplicate individual menu items from the editor.
- Snapshot system: auto-snapshot before every save, manual snapshots, restore and delete.
- Appearance Menu Manager page with sortable table, bulk duplicate, bulk export (ZIP), and bulk delete.
- JSON export and import with URL find & replace and dry-run preview.
- Multisite support: copy menus to any sub-site with optional URL rewriting.
- REST API at
/wp-json/cmd/v1/— duplicate menu, export menu, duplicate item. - WP-CLI command group
wp swift-menu-duplicator— duplicate, export, import, copy-to-site. - WPML and Polylang compatibility — translation and language meta stripped from duplicates.
- Developer hooks and filters throughout for extensibility.





