Descripziun
Control which menu items are shown based on login status, user role, device type, page type, or archive context. Rules are configured directly in the WordPress nav-menu editor and evaluated on every page load.
Reviews
Fanadur 15, 2026
A very useful plugin for controlling which WordPress menu items are displayed to different visitors. The visibility rules are easy to configure directly from the menu editor, without needing custom code.
It works well for showing or hiding menu items based on login status, user role, device type, and different page contexts. The interface is straightforward, and the plugin does exactly what it promises without adding unnecessary complexity.
Highly recommended for anyone who needs more control over their WordPress navigation menus.
Contributors & Developers
“EffortLess Layered Menu Visibility” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “EffortLess Layered Menu Visibility” 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.10
- Fix: renamed the donate-notice class to the plugin’s own ELLMV_ prefix (Plugin Check flagged the shared, un-prefixed class name).
- Fix: corrected @package doc tag casing to EffortLess (capital L), matching the plugin’s display name.
1.0.9
- Fix: corrected „Contributors“ in readme.txt to the actual WordPress.org owner username.
1.0.8
- Add: donate notice on the Menus admin screen.
1.0.7
- Fix: removed load_plugin_textdomain() call (discouraged since WP 4.6; translations load automatically).
- Fix: removed „Domain Path“ header pointing to a non-existent /languages folder.
1.0.6
- Fix: removed duplicate Plugin URI/Author URI header values flagged by the plugin review team.
1.0.5
- Update: Confirmed compatibility with WordPress 7.0.
1.0.4
- Update: plugin display name corrected to EffortLess Layered Menu Visibility.
- Update: Tested up to WordPress 7.0.
1.0.3
- Add: children of a hidden parent menu item are now also hidden (cascades to any nesting depth).
- Add: uninstall.php removes all _ellmv_visibility_rules post meta when the plugin is deleted.
1.0.2
- Fix: translations never loaded because load_textdomain was registered on plugins_loaded from inside a plugins_loaded callback; now called directly.
- Remove: stale bug-reference comments from PHP and JS files.
- Refactor: hoist wp_get_current_user() above the rule loop in is_menu_item_visible().
1.0.1
- Fix: Front-end filtering was completely inert — add_custom_fields hook moved out of admin_init so it fires on the public front-end.
- Fix: Shared POST field names caused every menu item to inherit all other items‘ rules on save; field names are now scoped per item ID.
- Fix: PHP translation call inside the static JS file is now delivered via wp_localize_script.
- Fix: „Add Rule“ with no existing rules produced an empty type select; options are now built from server-provided data.
- Fix: Value ‚0‘ was silently dropped by empty(), making boolean negation (not logged-in, not mobile, not archive) impossible.
- Fix: JS rule index collision after a removal could overwrite a surviving rule on save; replaced with a monotonic counter.
- Fix: Missing wp_unslash() before sanitize_text_field() on $_POST values.
- Fix: Boolean rule types now use a Yes/No select and compare against ‚1‘/’0′ instead of relying on PHP bool cast of an arbitrary string.
1.0.0
- Initial release.
