Maestro: The Inline Admin Menu Editor
Maestro lets you orchestrate the appearance of the WordPress admin menu.
Instead of a separate settings screen, Maestro turns the admin menu into something you edit in place — right where it lives. Toggle Edit Menu from the admin bar, and the menu becomes editable. Click a menu item to rename it, hide it from selected user roles, or change its icon. Drag submenu items and whole menu groups to reorder them.
Try Maestro right here. Launch a disposable demo in WordPress Playground — it boots a site with Maestro active, User Switching, and test users (editor, author, contributor, subscriber; password password) so you can try per-role visibility by switching to another user’s account.
What you can do — as a site administrator
Maestro’s enhancements are only activated for logged-in users with an Administrator role. They can:
- Rename any top-level or submenu item — just click the label.
- Reorder items by dragging (top-level items among themselves, submenu items within their parent), or with the keyboard (
Alt+Arrow). - Swap icons on top-level items. The icon picker offers Dashicons and bundled Bootstrap Icons with search. It accepts any of WordPress’s four native icon forms (dashicon, «none», base64 image data-URI, or an image URL).
- Hide items from chosen roles — including administrators. Custom roles registered by other plugins (User Role Editor, Members, etc.) appear automatically.
- Reset a single item to its WordPress default, or reset everything at once.
Changes are global — one configuration applies to everyone. Your custom menu configuration is stored as a sparse delta (just the differences) layered over the menu WordPress builds on each load. Nothing is rebuilt or duplicated, so a reset simply removes the delta, and the original menu returns.
Important: visibility is cosmetic, not access control
Hiding a menu item only declutters the menu. The underlying admin page still loads for anyone who knows or types its URL if they’re authorized to see it. That’s because a page’s own registered capability is the true lock. Maestro operates on the menu (presentation), which is a different plane from authorization.
If you need to actually prevent access, pair Maestro with a capability manager like PublishPress Capabilities**. It’s menu-aware, and its Pro tier can block admin pages by URL.
The maestro_capability filter lets such a plugin hand editing rights to a custom capability instead of the default manage_options.
Accessibility and localization
The editor is keyboard-operable end to end — select with Enter/Space, reorder with Alt+Arrow, and every move and save is announced to screen
readers. Modified items carry a non-color indicator with screen-reader text, so their state is never indicated by color alone.
Maestro uses the maestro-menu-editor text domain and ships a translation template plus starter language packs for Spanish (es_ES), German (de_DE), Japanese (ja), French (fr_FR), Portuguese – Brazil (pt_BR), and Italian (it_IT). WordPress.org language packs override and extend these; native-speaker and WordPress Polyglots reviews are welcome.
Architecture (for developers)
Config— reads/writes/sanitizes a single option (maestro_config) holding only the deltas. Reset = delete the option; the natural menu returns automatically.Replay— on a lateadmin_menupass, applies rename/icon/visibility to the$menu/$submenuglobals and reorders submenus. Top-level order uses the corecustom_menu_order+menu_orderfilters. Resilient to missing slugs (orphans are skipped) and new items (appended at the end).Rest—maestro/v1/config(GET/POST/DELETE), capability-gated,X-WP-Nonce.- The editor JS is driven by a localized model (with DOM ids), not DOM scraping, and diffs against captured pristine defaults so the stored config stays sparse.
- Localized editor labels are passed from PHP to JavaScript in
maestroData.i18n; the runtime zip includes the bundled POT template and starter catalogs.
Known limits / deferred to v2
- Reparenting (moving an item between a top-level position and a submenu) is not included. Top-level items reorder among top-level items, and submenu items reorder within their current parent. Reparenting needs hand-splicing of the globals plus
parent_file/submenu_filehighlighting fixes — a known minefield, parked deliberately. - Separators are preserved in place but not yet add/move/delete-able; their generated slugs (
separator1…) have no stable identity to key against. - Renaming an item drops any core-appended count badge (e.g., pending comments) from that label, since the badge lives inside the title string.
- Submenu sort relies on items registering by the late
admin_menupass; a plugin that registers submenus on an unusually late hook may not be captured.
Credits
Bundled Bootstrap Icons are © The Bootstrap Authors, licensed under the MIT License. They are recoloured to WordPress
menu grey and embedded as data-URIs; see bin/generate-bootstrap-icons.mjs.
Support This Plugin
If Maestro saves you time or brings you or your clients the joy of a tidy admin menu, you can support its ongoing maintenance through GitHub Sponsors.
