Description
Shed Menu adds visibility conditions to WordPress navigation menu items. You can show or hide each item based on three conditions:
- Login status (logged in / logged out / everyone)
- Date range (start datetime, end datetime)
- User roles (administrator, editor, author, contributor, subscriber, or custom roles)
All conditions are optional and combined with AND logic. This plugin reads the current user’s role information via wp_get_current_user() to evaluate role-based conditions.
Three ways to use
- Standard menus — Open Appearance Menus, expand any item, and set the conditions inline.
- Hand-coded themes — Use the helper function
shedmenu_visible()in yourheader.phpor other template files. - Block editor — Wrap any blocks in the “Shed Menu — Conditional” block to show/hide them based on the same conditions.
Helper function example
<?php if ( shedmenu_visible( [ 'login' => 'in' ] ) ) : ?>
<li><a href="/mypage/">My Page</a></li>
<?php endif; ?>
Shortcode example
[shedmenu_visible login="in" start="2026-04-01" end="2026-04-30" roles="administrator"]
This content is only visible to administrators between April 1 and April 30.
[/shedmenu_visible]
日本語の説明
WordPress 標準ナビゲーションメニューに、メニュー項目単位の表示条件を追加します。
- ログイン状態(ログイン中 / ログアウト中 / 全員)
- 表示期間(開始日時・終了日時)
- ユーザーロール(管理者 / 編集者 / 投稿者 等)
全ての条件は任意で、AND 条件で組み合わされます。
外観 メニュー画面で各項目に条件を設定できます。テーマで wp_nav_menu() を使わず HTML 直書きしている場合は shedmenu_visible() ヘルパー関数を使ってください。Gutenberg では「Shed Menu — Conditional」ブロックで任意のブロック群を条件表示にできます。
Third-Party Services
This plugin does not connect to any external services. All processing happens on your own server.
Screenshots
Installation
- Upload the
shed-menufolder to the/wp-content/plugins/directory, or install via the Plugins screen in WordPress. - Activate the plugin through the Plugins screen.
- Go to Appearance Menus, expand any menu item, and configure visibility conditions.
FAQ
-
Does this work with caching plugins?
-
Login-based visibility is evaluated per request. If you use a page caching plugin, make sure it serves separate cached pages for logged-in vs logged-out users. Most caching plugins support this by default.
-
Shed Menu uses the standard
wp_nav_menu_objectsfilter and does not override menu rendering. It works alongside most menu plugins. -
The Navigation block uses its own internal item structure that does not expose per-item post meta in a stable way. Use the “Shed Menu — Conditional” block to wrap navigation links instead.
-
What happens to my settings when I uninstall?
-
Uninstalling removes all visibility settings stored on menu items and plugin options. Deactivating without uninstalling preserves all settings.
-
Can I use custom roles?
-
Yes. The Roles field in the menu item editor lists all roles registered in your WordPress installation, including custom roles added by other plugins.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Shed Menu” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Shed Menu” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
0.1.5
- [fix] Block namespace renamed from
shed/conditionaltoshed-menu/conditionalfor WordPress.org compliance. - [fix] Helper function renamed from
shed_menu_visible()toshedmenu_visible()for prefix consistency. - [fix] Shortcode renamed from
[shed_menu_visible]to[shedmenu_visible]for prefix consistency. - [fix] readme.txt License field updated to SPDX identifier GPL-2.0-or-later.
0.1.4
- [perf] Child-item cascade removal now uses O(1) hash lookup instead of O(n) in_array; added circular-reference guard.
- [fix] Added update_meta_cache() call in filter_menu_items() to prevent N+1 meta queries on large menus.
- [fix] normalize_datetime() now validates month/day with checkdate() to reject invalid dates like 2026-02-30.
- [fix] array_filter() applied to roles meta in is_item_visible() to strip empty strings stored in serialized arrays.
- [fix] Added Domain Path header; renamed wp_localize_script object from wsmData to shedmenuData.
- [fix] Removed non-standard Description-ja header field.
0.1.2
- [fix] Constant
Shedmenu_PATHrenamed toSHEDMENU_PATHto follow WordPress naming conventions (uppercase). - [fix] Replaced
phpcs:disable/enableblocks with per-linephpcs:ignorein menu item save handler. Added English comment explaining core nonce pre-verification.
0.1.1
- Changed: All function, class, constant, hook, and option prefixes renamed from wsm_/WSM_ to shedmenu_/SHEDMENU_/Shedmenu_.
0.1.0
- Initial release.
- Login status visibility (in / out / either).
- Scheduled date range visibility (start / end datetime).
- Role-based visibility (all registered roles supported).
- Helper function shed_menu_visible() for hand-coded themes.
- Shortcode [shed_menu_visible] for widgets, pages, and classic editor.
- Conditional block (shed/conditional) for the block editor.
- Automatic cascade: hiding a parent item also hides all its children.



