{"id":257321,"date":"2025-10-27T00:07:57","date_gmt":"2025-10-27T00:07:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/menu-control\/"},"modified":"2025-11-25T22:20:13","modified_gmt":"2025-11-25T22:20:13","slug":"menu-ghost","status":"publish","type":"plugin","link":"https:\/\/ca.wordpress.org\/plugins\/menu-ghost\/","author":20512488,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.0.1","stable_tag":"2.0.1","tested":"6.8.5","requires":"6.6","requires_php":"8.0","requires_plugins":null,"header_name":"Menu Ghost","header_author":"Reza Sarailoo","header_description":"Target menu items by role, device, schedule, and campaign rules using a fast, native conditions interface inside the menu editor.","assets_banners_color":"","last_updated":"2025-11-25 22:20:13","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/sarailoo\/menu-ghost","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":0,"downloads":280,"num_ratings":1,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"sarailoo","date":"2025-10-27 00:07:34"},"1.0.1":{"tag":"1.0.1","author":"sarailoo","date":"2025-11-12 21:38:29"},"2.0.0":{"tag":"2.0.0","author":"sarailoo","date":"2025-11-25 20:46:00"},"2.0.1":{"tag":"2.0.1","author":"sarailoo","date":"2025-11-25 22:20:13"}},"upgrade_notice":[],"ratings":{"1":0,"2":0,"3":0,"4":0,"5":1},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3394658,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3394658,"resolution":"256x256","location":"assets","locale":""},"icon.svg":{"filename":"icon.svg","revision":3394658,"resolution":false,"location":"assets","locale":false}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","2.0.0","2.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3394658,"resolution":"1","location":"assets","locale":""},"screenshot-10.png":{"filename":"screenshot-10.png","revision":3402795,"resolution":"10","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3394671,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3394671,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3394671,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3394671,"resolution":"5","location":"assets","locale":""},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3394671,"resolution":"6","location":"assets","locale":""},"screenshot-7.png":{"filename":"screenshot-7.png","revision":3394671,"resolution":"7","location":"assets","locale":""},"screenshot-8.png":{"filename":"screenshot-8.png","revision":3394671,"resolution":"8","location":"assets","locale":""},"screenshot-9.png":{"filename":"screenshot-9.png","revision":3394671,"resolution":"9","location":"assets","locale":""}},"screenshots":{"1":"Menu item meta box with the Display Conditions button inside Appearance \u25b8 Menus.","2":"Pages tab focused on a single \"Exclude date archive\" rule for quick toggles.","3":"Pages tab showing layered include\/exclude rules for archives, authors, and WooCommerce products.","4":"Advanced Rules User section overview: User Role, User Device, Login Status, Signup Date and Browser Language.","5":"Advanced Rules Date &amp; Time section overview: Days of the Week, Within Date Range and Within Time Window.","6":"URL &amp; Campaign summary list highlighting query string and UTM parameter switches.","7":"Expanded User panel with role\/device\/login toggles enabled for desktop, tablet, and mobile.","8":"Date &amp; Time editor displaying weekday picker, date range, and time window controls.","9":"URL &amp; Campaign detail editor configuring a query parameter and UTM campaign value.","10":"Display Conditions button inside the block editor Navigation inspector for block themes."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[215307,244116,1753,10685,11917],"plugin_category":[43],"plugin_contributors":[249772],"plugin_business_model":[],"class_list":["post-257321","plugin","type-plugin","status-publish","hentry","plugin_tags-conditional-menus","plugin_tags-menu-visibility","plugin_tags-navigation","plugin_tags-personalization","plugin_tags-user-roles","plugin_category-customization","plugin_contributors-sarailoo","plugin_committers-sarailoo"],"banners":[],"icons":{"svg":"https:\/\/ps.w.org\/menu-ghost\/assets\/icon.svg?rev=3394658","icon":"https:\/\/ps.w.org\/menu-ghost\/assets\/icon.svg?rev=3394658","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/menu-ghost\/assets\/screenshot-1.png?rev=3394658","caption":"Menu item meta box with the Display Conditions button inside Appearance \u25b8 Menus."},{"src":"https:\/\/ps.w.org\/menu-ghost\/assets\/screenshot-2.png?rev=3394671","caption":"Pages tab focused on a single \"Exclude date archive\" rule for quick toggles."},{"src":"https:\/\/ps.w.org\/menu-ghost\/assets\/screenshot-3.png?rev=3394671","caption":"Pages tab showing layered include\/exclude rules for archives, authors, and WooCommerce products."},{"src":"https:\/\/ps.w.org\/menu-ghost\/assets\/screenshot-4.png?rev=3394671","caption":"Advanced Rules User section overview: User Role, User Device, Login Status, Signup Date and Browser Language."},{"src":"https:\/\/ps.w.org\/menu-ghost\/assets\/screenshot-5.png?rev=3394671","caption":"Advanced Rules Date &amp; Time section overview: Days of the Week, Within Date Range and Within Time Window."},{"src":"https:\/\/ps.w.org\/menu-ghost\/assets\/screenshot-6.png?rev=3394671","caption":"URL &amp; Campaign summary list highlighting query string and UTM parameter switches."},{"src":"https:\/\/ps.w.org\/menu-ghost\/assets\/screenshot-7.png?rev=3394671","caption":"Expanded User panel with role\/device\/login toggles enabled for desktop, tablet, and mobile."},{"src":"https:\/\/ps.w.org\/menu-ghost\/assets\/screenshot-8.png?rev=3394671","caption":"Date &amp; Time editor displaying weekday picker, date range, and time window controls."},{"src":"https:\/\/ps.w.org\/menu-ghost\/assets\/screenshot-9.png?rev=3394671","caption":"URL &amp; Campaign detail editor configuring a query parameter and UTM campaign value."},{"src":"https:\/\/ps.w.org\/menu-ghost\/assets\/screenshot-10.png?rev=3402795","caption":"Display Conditions button inside the block editor Navigation inspector for block themes."}],"raw_content":"<!--section=description-->\n<p>Menu Ghost lets you conditionally display each menu item based on factors like user role, device, date, pages, and more.<\/p>\n\n<p>Design frictionless navigation experiences and boost conversions by only showing relevant menu items to each visitor. Menu Ghost integrates with the native WordPress menu editor and adds a modern conditions interface that feels like it belongs in core. Everything happens inside <strong>Appearance \u2192 Menus<\/strong> (classic themes) or <strong>Site Editor \u2192 Navigation<\/strong> (block themes) no shortcodes or template edits required.<\/p>\n\n<h3>What does Menu Ghost do?<\/h3>\n\n<p>Menu Ghost gives you total control over which navigation links appear and when. Build unlimited rule sets per menu item, combining audience, page, schedule, and campaign conditions. Hide seasonal promotions after a sale ends, display member-only dashboards, or show localized links based on browser language.<\/p>\n\n<h3>Key features<\/h3>\n\n<ul>\n<li><strong>Audience targeting<\/strong> \u2013 Show or hide menu items based on user role, login status, browser language, or detected device (desktop, tablet, mobile).<\/li>\n<li><strong>Page &amp; post rules<\/strong> \u2013 Limit links to specific pages, post types, taxonomies, archives, author archives, search results, or 404 pages.<\/li>\n<li><strong>Scheduling controls<\/strong> \u2013 Activate items on selected weekdays, within date ranges, or during daily time windows.<\/li>\n<li><strong>Campaign awareness<\/strong> \u2013 React to query-string values, UTM parameters, or custom marketing links for landing pages.<\/li>\n<li><strong>No-code workflow<\/strong> \u2013 React-powered UI inside the existing menu screen. Toggle rules with familiar WordPress components.<\/li>\n<li><strong>Unlimited conditions<\/strong> \u2013 Stack include\/exclude rules to create precise logic for every menu item.<\/li>\n<li><strong>Performance friendly<\/strong> \u2013 All logic runs server-side with cached WordPress APIs. No front-end scripts added to your theme.<\/li>\n<\/ul>\n\n<h3>Popular use cases<\/h3>\n\n<ul>\n<li>Display a \u201cMembers Area\u201d link only to logged-in customers on desktop.<\/li>\n<li>Promote a holiday sale on every page until a specific date\/time is reached.<\/li>\n<li>Replace \u201cBook a call\u201d with \u201cDownload brochure\u201d on mobile visitors to boost conversions.<\/li>\n<li>Show \u201cReturn to checkout\u201d when users view product archives, but hide it elsewhere.<\/li>\n<li>Localize navigation labels and URLs based on browser language or UTM campaigns.<\/li>\n<\/ul>\n\n<h3>Why choose Menu Ghost?<\/h3>\n\n<ol>\n<li><strong>Native experience<\/strong> \u2013 Built with the WordPress components library for a seamless admin UI.<\/li>\n<li><strong>Clean code &amp; extensibility<\/strong> \u2013 PHP logic follows core standards and stores data in post meta.<\/li>\n<li><strong>Marketing ready<\/strong> \u2013 Understand traffic sources and tailor menus without page builders.<\/li>\n<li><strong>SEO aware<\/strong> \u2013 Hide links for humans while keeping friendly markup for search engines (links still exist, only visibility changes).<\/li>\n<\/ol>\n\n<p>The interface is built with React and uses WordPress components so it remains responsive, accessible, and familiar. All rule data is stored in post meta to keep compatibility with exports, migrations, and backups.<\/p>\n\n<h3>Rule reference<\/h3>\n\n<h4>Pages tab<\/h4>\n\n<ul>\n<li><strong>Include \/ Exclude<\/strong> \u2013 Decide whether a matching condition should show or hide the menu item.<\/li>\n<li><strong>Entire Site<\/strong> \u2013 Create a catch-all rule that always fires. Place it below granular rules when you need fallback behavior.<\/li>\n<li><strong>Archive scopes<\/strong> \u2013 Target date archives, author archives, taxonomy listings, WooCommerce product archives, search results, or even the 404 template.<\/li>\n<li><strong>Singular scopes<\/strong> \u2013 Limit links to specific posts, pages, custom post types, parent\/child relationships, or taxonomy terms.<\/li>\n<li><strong>Add Condition<\/strong> \u2013 Stack unlimited rules. Menu Ghost evaluates them from top to bottom, so keep broad rules toward the bottom of the list.<\/li>\n<\/ul>\n\n<h4>Advanced tab<\/h4>\n\n<ul>\n<li><strong>User Role<\/strong> \u2013 Match any WordPress role, including custom roles added by eCommerce or membership plugins.<\/li>\n<li><strong>User Device<\/strong> \u2013 Detect desktop, tablet, or mobile visitors to tailor calls to action per device.<\/li>\n<li><strong>Login Status<\/strong> \u2013 Serve different menu links to logged-in versus logged-out visitors.<\/li>\n<li><strong>Signup Date<\/strong> \u2013 Target members who registered before or after a specific date\u2014ideal for onboarding flows.<\/li>\n<li><strong>Browser Language<\/strong> \u2013 Show localized links when the visitor\u2019s browser shares a preferred language.<\/li>\n<li><strong>Days of the Week<\/strong> \u2013 Toggle links on specific weekdays (e.g., \"Weekend brunch menu\").<\/li>\n<li><strong>Within Date Range<\/strong> \u2013 Schedule seasonal links to appear between two calendar dates without manual edits.<\/li>\n<li><strong>Within Time Window<\/strong> \u2013 Display links only during a daily time slice, such as support hours or flash sales.<\/li>\n<li><strong>URL Query Parameter<\/strong> \u2013 Require a query-string key\/value (like <code>ref=partner<\/code>) before the menu item appears.<\/li>\n<li><strong>UTM Campaign \/ Content \/ Medium \/ Source \/ Term<\/strong> \u2013 React to marketing URLs so visitors see campaign-specific navigation when arriving from ads or emails.<\/li>\n<\/ul>\n\n<h3>Development<\/h3>\n\n<p>The source code for Menu Ghost lives in the public repository at https:\/\/github.com\/sarailoo\/menu-ghost.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>menu-ghost<\/code> folder to <code>\/wp-content\/plugins\/<\/code> or install via the Plugins screen.<\/li>\n<li>Activate Menu Ghost through <strong>Plugins \u2192 Installed Plugins<\/strong>.<\/li>\n<li>Go to <strong>Appearance \u2192 Menus<\/strong> (or <strong>Site Editor \u2192 Navigation<\/strong> in block themes), open a menu item, and click <strong>Display Conditions<\/strong> to start adding rules.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='does%20this%20plugin%20slow%20down%20my%20site%3F'><h3>Does this plugin slow down my site?<\/h3><\/dt>\n<dd><p>No. Menu Ghost only evaluates rules when <code>wp_nav_menu()<\/code> renders, using cached WordPress APIs. Nothing is injected on the front end, and there are no extra tables or cron jobs.<\/p><\/dd>\n<dt id='will%20it%20work%20with%20my%20theme%20or%20page%20builder%3F'><h3>Will it work with my theme or page builder?<\/h3><\/dt>\n<dd><p>Yes. Any theme or builder that leverages the core menu system automatically benefits from Menu Ghost. No template edits, hooks, or shortcodes required.<\/p><\/dd>\n<dt id='can%20i%20show%20or%20hide%20links%20for%20logged-in%20customers%20only%3F'><h3>Can I show or hide links for logged-in customers only?<\/h3><\/dt>\n<dd><p>Absolutely. Enable \u201cLogin Status\u201d rules to create separate navigation items for logged-in and logged-out visitors.<\/p><\/dd>\n<dt id='can%20i%20schedule%20menu%20links%20for%20seasonal%20campaigns%3F'><h3>Can I schedule menu links for seasonal campaigns?<\/h3><\/dt>\n<dd><p>Use the date range or time window rules to automatically activate\/deactivate links without touching menus again.<\/p><\/dd>\n<dt id='how%20do%20i%20localize%20menus%20for%20different%20languages%3F'><h3>How do I localize menus for different languages?<\/h3><\/dt>\n<dd><p>Use the browser language condition or query-string parameters (e.g., <code>?lang=fr<\/code>) to tailor navigation per locale.<\/p><\/dd>\n<dt id='does%20menu%20ghost%20work%20with%20woocommerce%20or%20membership%20plugins%3F'><h3>Does Menu Ghost work with WooCommerce or membership plugins?<\/h3><\/dt>\n<dd><p>Yes. As long as the menu item exists in WordPress, you can apply Menu Ghost rules to it\u2014ideal for WooCommerce account links, LMS dashboards, community forums, and more.<\/p><\/dd>\n<dt id='where%20are%20the%20translations%20stored%3F'><h3>Where are the translations stored?<\/h3><\/dt>\n<dd><p>If you upload the plugin to WordPress.org, translations are managed by GlotPress. Custom translations can be placed in <code>wp-content\/languages\/plugins\/menu-ghost-*.mo<\/code>.\nBundled locales: es_ES, fr_FR, de_DE, pt_BR, ru_RU, it_IT, nl_NL, ja, zh_CN, pl_PL, fa_IR (RTL styles included).<\/p><\/dd>\n<dt id='can%20i%20migrate%20settings%20between%20sites%3F'><h3>Can I migrate settings between sites?<\/h3><\/dt>\n<dd><p>All data is stored in post meta, so it travels with standard WordPress export\/import tools, backup plugins, or site migration services.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Bugfix: RTL style for checkboxes.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Block editor themes support.<\/li>\n<li>New languages support.<\/li>\n<li>RTL support.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Update readme.<\/li>\n<li>Add screenshots.<\/li>\n<li>Add plugin logo.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial public release with menu item display rules, advanced campaign targeting, and REST-powered async selectors.<\/li>\n<\/ul>","raw_excerpt":"Target menu items by role, device, schedule, and campaign rules using a fast, native conditions interface inside the menu editor.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/257321","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=257321"}],"author":[{"embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sarailoo"}],"wp:attachment":[{"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=257321"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=257321"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=257321"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=257321"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=257321"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=257321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}