{"id":332487,"date":"2026-07-11T06:01:47","date_gmt":"2026-07-11T06:01:47","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/snap-mega-menu-builder\/"},"modified":"2026-07-11T06:01:36","modified_gmt":"2026-07-11T06:01:36","slug":"beplus-visual-mega-nav","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/beplus-visual-mega-nav\/","author":20110019,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.0.7","stable_tag":"0.0.7","tested":"7.0.1","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Beplus Visual Mega Navigation","header_author":"Beplusthemes","header_description":"A Gutenberg-powered visual mega navigation builder for WordPress. Build rich mega menus visually using the block editor.","assets_banners_color":"cec9c0","last_updated":"2026-07-11 06:01:36","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/miketropi\/beplus-visual-mega-nav","header_author_uri":"https:\/\/beplusthemes.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":38,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.0.7":{"tag":"0.0.7","author":"miketropi","date":"2026-07-11 06:01:36"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3603636,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3603636,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3603643,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3603643,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"beplus-visual-mega-nav\/beplus-header":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"beplus-visual-mega-nav\/beplus-header","title":"BePlus Header","category":"header","icon":"table-row-before","description":"Outer header container with sticky positioning, scroll effects, and per-instance mobile breakpoint.","keywords":["header","sticky","navigation","beplus"],"textdomain":"beplus-visual-mega-nav","attributes":{"instanceId":{"type":"string","default":""},"mobileBreakpoint":{"type":"number","default":782},"sticky":{"type":"boolean","default":false},"scrollEffect":{"type":"string","default":"none"},"transparentTop":{"type":"boolean","default":false},"gridColumns":{"type":"string","default":"auto 1fr"},"scrollBgColor":{"type":"string","default":""}},"providesContext":{"beplus-visual-mega-nav\/instanceId":"instanceId","beplus-visual-mega-nav\/mobileBreakpoint":"mobileBreakpoint","beplus-visual-mega-nav\/sticky":"sticky"},"supports":{"spacing":{"blockGap":true,"padding":true,"margin":false},"color":{"background":true,"text":true},"align":["wide","full"]},"render":"file:.\/render.php","viewScript":"file:.\/view.js","style":"file:.\/style.css","editorStyle":"file:.\/editor.css","editorScript":"file:..\/..\/build\/blocks.js"},"beplus-visual-mega-nav\/nav-toggle":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"beplus-visual-mega-nav\/nav-toggle","title":"Nav Toggle","category":"header","ancestor":["beplus-visual-mega-nav\/beplus-header"],"icon":"menu","description":"Hamburger button that opens the mobile navigation overlay below the breakpoint.","keywords":["hamburger","toggle","menu","mobile","beplus"],"textdomain":"beplus-visual-mega-nav","attributes":{"iconStyle":{"type":"string","default":"lines-3"},"label":{"type":"string","default":""},"labelVisible":{"type":"boolean","default":false}},"usesContext":["beplus-visual-mega-nav\/overlayId","beplus-visual-mega-nav\/instanceId","beplus-visual-mega-nav\/mobileBreakpoint"],"supports":{"html":false,"spacing":{"padding":true,"margin":true}},"render":"file:.\/render.php","style":"file:.\/style.css","editorStyle":"file:.\/editor.css","editorScript":"file:..\/..\/build\/blocks.js"},"beplus-visual-mega-nav\/beplus-navigation":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"beplus-visual-mega-nav\/beplus-navigation","title":"BePlus Navigation","category":"header","parent":["beplus-visual-mega-nav\/beplus-header","core\/group","core\/column"],"icon":"menu","description":"Flexible navigation container that hosts a classic menu and hamburger toggle.","keywords":["navigation","menu","nav","beplus"],"textdomain":"beplus-visual-mega-nav","attributes":{"overlayId":{"type":"string","default":""}},"usesContext":["beplus-visual-mega-nav\/instanceId","beplus-visual-mega-nav\/mobileBreakpoint"],"providesContext":{"beplus-visual-mega-nav\/overlayId":"overlayId"},"supports":{"layout":{"type":"flex","allowJustification":true,"allowVerticalAlignment":true},"spacing":{"blockGap":true,"padding":true}},"render":"file:.\/render.php","style":"file:.\/style.css","editorStyle":"file:.\/editor.css","editorScript":"file:..\/..\/build\/blocks.js"},"beplus-visual-mega-nav\/nav-menu-area":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"beplus-visual-mega-nav\/nav-menu-area","title":"Menu Area","category":"header","parent":["beplus-visual-mega-nav\/beplus-navigation"],"icon":"list-view","description":"Renders a classic WordPress menu using the existing mega menu engine.","keywords":["menu","navigation","classic menu","beplus"],"textdomain":"beplus-visual-mega-nav","attributes":{"menuId":{"type":"number","default":0}},"usesContext":["beplus-visual-mega-nav\/instanceId"],"supports":{"html":false,"spacing":{"padding":true},"typography":{"fontSize":true,"lineHeight":true,"__experimentalFontFamily":true,"__experimentalFontWeight":true,"__experimentalFontStyle":true,"__experimentalTextTransform":true,"__experimentalLetterSpacing":true}},"render":"file:.\/render.php","style":"file:.\/style.css","editorScript":"file:..\/..\/build\/blocks.js"}},"tagged_versions":["0.0.7"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3603636,"resolution":"1","location":"assets","locale":"","width":1675,"height":913},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3603636,"resolution":"2","location":"assets","locale":"","width":1671,"height":914},"screenshot-3.jpg":{"filename":"screenshot-3.jpg","revision":3603636,"resolution":"3","location":"assets","locale":"","width":1161,"height":871},"screenshot-4.jpg":{"filename":"screenshot-4.jpg","revision":3603636,"resolution":"4","location":"assets","locale":"","width":1693,"height":954},"screenshot-5.jpg":{"filename":"screenshot-5.jpg","revision":3603636,"resolution":"5","location":"assets","locale":"","width":1672,"height":993},"screenshot-6.jpg":{"filename":"screenshot-6.jpg","revision":3603636,"resolution":"6","location":"assets","locale":"","width":1029,"height":785}},"screenshots":[]},"plugin_section":[],"plugin_tags":[148857,148076,6276,138806,1753],"plugin_category":[43],"plugin_contributors":[245475],"plugin_business_model":[],"class_list":["post-332487","plugin","type-plugin","status-publish","hentry","plugin_tags-block-editor","plugin_tags-gutenberg","plugin_tags-mega-menu","plugin_tags-menu-builder","plugin_tags-navigation","plugin_category-customization","plugin_contributors-miketropi","plugin_committers-miketropi"],"banners":{"banner":"https:\/\/ps.w.org\/beplus-visual-mega-nav\/assets\/banner-772x250.png?rev=3603643","banner_2x":"https:\/\/ps.w.org\/beplus-visual-mega-nav\/assets\/banner-1544x500.png?rev=3603643","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/beplus-visual-mega-nav\/assets\/icon-128x128.png?rev=3603636","icon_2x":"https:\/\/ps.w.org\/beplus-visual-mega-nav\/assets\/icon-256x256.png?rev=3603636","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/beplus-visual-mega-nav\/assets\/screenshot-1.jpg?rev=3603636","caption":""},{"src":"https:\/\/ps.w.org\/beplus-visual-mega-nav\/assets\/screenshot-2.jpg?rev=3603636","caption":""},{"src":"https:\/\/ps.w.org\/beplus-visual-mega-nav\/assets\/screenshot-3.jpg?rev=3603636","caption":""},{"src":"https:\/\/ps.w.org\/beplus-visual-mega-nav\/assets\/screenshot-4.jpg?rev=3603636","caption":""},{"src":"https:\/\/ps.w.org\/beplus-visual-mega-nav\/assets\/screenshot-5.jpg?rev=3603636","caption":""},{"src":"https:\/\/ps.w.org\/beplus-visual-mega-nav\/assets\/screenshot-6.jpg?rev=3603636","caption":""}],"raw_content":"<!--section=description-->\n<p><\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Visual builder<\/strong> \u2014 Use the block editor to design mega menu content with columns, images, buttons, and more.<\/li>\n<li><strong>Per-item settings<\/strong> \u2014 Enable\/disable, width mode, background color, animation per menu item.<\/li>\n<li><strong>Import \/ export<\/strong> \u2014 Apply starter layouts from a template store or export your design as JSON.<\/li>\n<li><strong>Root-level only<\/strong> \u2014 Only top-level menu items get the mega menu option (depth-0).<\/li>\n<li><strong>Clean data storage<\/strong> \u2014 Settings and content saved as <code>nav_menu_item<\/code> post meta.<\/li>\n<li><strong>Frontend rendering<\/strong> \u2014 Custom Walker outputs mega panels with hover\/focus\/keyboard interaction.<\/li>\n<li><strong>Accessible<\/strong> \u2014 ARIA attributes, keyboard navigation, focus trapping.<\/li>\n<li><strong>Theme-friendly<\/strong> \u2014 CSS custom properties for easy theme overrides.<\/li>\n<\/ul>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>WordPress 6.0+<\/li>\n<li>PHP 8.0+<\/li>\n<li>Node.js 18+ (for development)<\/li>\n<\/ul>\n\n<h3>Usage<\/h3>\n\n<ol>\n<li>Go to <strong>Appearance \u2192 Menus<\/strong>.<\/li>\n<li>Click the <strong>\"Mega Menu\"<\/strong> link on any top-level menu item.<\/li>\n<li>Toggle <strong>Enable Mega Menu<\/strong> in the Settings tab.<\/li>\n<li>Switch to the <strong>Content Builder<\/strong> tab to design your mega menu content.<\/li>\n<li>Use <strong>Import<\/strong> or <strong>Export<\/strong> in the modal header to apply a template or save your layout as JSON.<\/li>\n<li>Click <strong>Save<\/strong>.<\/li>\n<\/ol>\n\n<h3>Template Store<\/h3>\n\n<p>The builder can load <strong>starter layouts<\/strong> from JSON files on disk. In the modal header, click <strong>Import<\/strong> to browse the template store or upload a JSON file. Click <strong>Export<\/strong> to download the current content and settings.<\/p>\n\n<h4>Where templates are loaded from<\/h4>\n\n<p>Templates are discovered from these folders (in order). If the same <code>slug<\/code> exists in more than one place, <strong>later sources override earlier ones<\/strong>:<\/p>\n\n\n\n\n  Priority\n  Source\n  Path\n\n\n\n\n  1 (low)\n  Plugin\n  <code>beplus-visual-mega-nav\/templates\/*.json<\/code>\n\n\n  2\n  Parent theme\n  <code>{theme}\/mega-menu-templates\/*.json<\/code>\n\n\n  3 (high)\n  Child theme\n  <code>{child-theme}\/mega-menu-templates\/*.json<\/code>\n\n\n\n\n<p><strong>Example (Nextora parent theme):<\/strong><\/p>\n\n<pre><code>wp-content\/themes\/nextora\/mega-menu-templates\/brand-nav.json\n<\/code><\/pre>\n\n<p><strong>Example (child theme override):<\/strong><\/p>\n\n<pre><code>wp-content\/themes\/nextora-child\/mega-menu-templates\/three-column-nav.json\n<\/code><\/pre>\n\n<p>A child-theme file with the same filename\/slug as a plugin template replaces the plugin version in the Import dropdown.<\/p>\n\n<h4>Built-in plugin templates<\/h4>\n\n\n\n\n  Slug\n  Title\n\n\n\n\n  <code>three-column-nav<\/code>\n  Three Column Navigation\n\n\n  <code>featured-with-links<\/code>\n  Featured + Links\n\n\n\n\n<p>See <code>templates\/<\/code> in this plugin for reference implementations.<\/p>\n\n<h4>Template JSON format<\/h4>\n\n<p>Each file is a single JSON object:<\/p>\n\n<pre><code>{\n  \"slug\": \"my-custom-menu\",\n  \"title\": \"My Custom Menu\",\n  \"description\": \"Optional short description shown in the Import dropdown.\",\n  \"version\": \"1.0.0\",\n  \"settings\": {\n    \"width\": \"full\",\n    \"customWidth\": 1200,\n    \"bgColor\": \"\",\n    \"animation\": \"fade\"\n  },\n  \"content\": \"&lt;!-- wp:columns --&gt;...\"\n}\n<\/code><\/pre>\n\n\n\n\n  Field\n  Required\n  Notes\n\n\n\n\n  <code>slug<\/code>\n  Recommended\n  Used as the filename (<code>{slug}.json<\/code>). If omitted, the filename (without <code>.json<\/code>) is used.\n\n\n  <code>title<\/code>\n  Recommended\n  Label in the Import dropdown.\n\n\n  <code>description<\/code>\n  Optional\n  Shown under the title in the Import dropdown.\n\n\n  <code>version<\/code>\n  Optional\n  Template metadata only.\n\n\n  <code>settings<\/code>\n  Optional\n  Panel settings applied with the template (<code>width<\/code>, <code>customWidth<\/code>, <code>bgColor<\/code>, <code>animation<\/code>).\n\n\n  <code>content<\/code>\n  <strong>Required<\/strong>\n  Serialized Gutenberg block HTML (same format saved to menu item meta).\n\n\n\n\n<p>Exported files from <strong>Export<\/strong> use the same shape (they may omit <code>slug<\/code>). You can drop an export into <code>mega-menu-templates\/<\/code> and add a <code>slug<\/code> to register it in the store.<\/p>\n\n<pre><code>content is sanitized on load using the same rules as saved mega menu content. Use only blocks from the allowed list below (extend via `beplus_vmn_allowed_blocks`).\n<\/code><\/pre>\n\n<h4>Allowed blocks<\/h4>\n\n\n\n\n  Category\n  Blocks\n\n\n\n\n  Layout\n  <code>core\/columns<\/code>, <code>core\/column<\/code>, <code>core\/group<\/code>, <code>core\/row<\/code>, <code>core\/stack<\/code>\n\n\n  Content\n  <code>core\/heading<\/code>, <code>core\/paragraph<\/code>, <code>core\/list<\/code>, <code>core\/list-item<\/code>, <code>core\/image<\/code>, <code>core\/buttons<\/code>, <code>core\/button<\/code>, <code>core\/separator<\/code>, <code>core\/spacer<\/code>\n\n\n  Navigation\n  <code>core\/page-list<\/code>, <code>beplus-visual-mega-nav\/link-item<\/code>\n\n\n  Media\n  <code>core\/cover<\/code>\n\n\n  Embeds \/ widgets\n  <code>core\/shortcode<\/code>, <code>core\/html<\/code>\n\n\n\n\n<pre><code>add_filter( 'beplus_vmn_allowed_blocks', function ( array $blocks ): array {\n    $blocks[] = 'my-plugin\/custom-block';\n    return $blocks;\n} );\n<\/code><\/pre>\n\n<h4>Import behaviour<\/h4>\n\n<ul>\n<li><strong>Template store<\/strong> \u2014 Lists all valid JSON templates from the plugin and active theme(s).<\/li>\n<li><strong>Upload JSON file<\/strong> \u2014 Import any file matching the format above (does not need to live in a template folder).<\/li>\n<li>Applying a template replaces the current <strong>Content Builder<\/strong> content and <strong>Settings<\/strong> in the modal. Click <strong>Save<\/strong> to persist changes to the menu item.<\/li>\n<\/ul>\n\n<h4>REST API<\/h4>\n\n\n\n\n  Method\n  Route\n  Description\n\n\n\n\n  <code>GET<\/code>\n  <code>\/wp-json\/beplus-visual-mega-nav\/v1\/templates<\/code>\n  List template summaries (<code>slug<\/code>, <code>title<\/code>, <code>description<\/code>, <code>source<\/code>).\n\n\n  <code>GET<\/code>\n  <code>\/wp-json\/beplus-visual-mega-nav\/v1\/templates\/{slug}<\/code>\n  Load full template (<code>settings<\/code> + <code>content<\/code>).\n\n\n\n\n<p>Requires <code>edit_theme_options<\/code>.<\/p>\n\n<h4>PHP hooks<\/h4>\n\n<pre><code>\/\/ Add or replace template scan directories (source label =&gt; absolute path).\nadd_filter( 'beplus_vmn_template_directories', function ( $directories ) {\n    $directories['custom'] = '\/path\/to\/my\/templates';\n    return $directories;\n} );\n\n\/\/ Filter the template list returned to the admin UI.\nadd_filter( 'beplus_vmn_templates', function ( $templates ) {\n    \/\/ $templates is keyed by slug.\n    return $templates;\n} );\n\n\/\/ Filter a single template before it is returned.\nadd_filter( 'beplus_vmn_template_data', function ( $template, $slug ) {\n    return $template;\n}, 10, 2 );\n~~~&lt;h3&gt;Development&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>npm run start       # Watch mode\nnpm run build       # Production build\ncomposer check      # PHP lint + PHPCS + PHPStan\nnpm run check:js    # ESLint + Stylelint\n~~~<\/p>\n\n<!--section=installation-->\n<pre><code># Clone the plugin\ncd wp-content\/plugins\/\ngit clone https:\/\/github.com\/miketropi\/beplus-visual-mega-nav.git beplus-visual-mega-nav\ncd beplus-visual-mega-nav\n\n# Install dependencies\ncomposer install\nnpm install\n\n# Build assets\nnpm run build\n<\/code><\/pre>\n\n<p>Activate the plugin in <strong>Plugins<\/strong> \u2192 <strong>Installed Plugins<\/strong>.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20do%20i%20add%20my%20theme%27s%20menu%20location%3F\"><h3>How do I add my theme's menu location?<\/h3><\/dt>\n<dd><p>Use the <code>beplus_vmn_locations<\/code> filter:<\/p>\n\n<pre><code>add_filter( 'beplus_vmn_locations', function ( $locations ) {\n    $locations[] = 'your-theme-location';\n    return $locations;\n} );\n<\/code><\/pre><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.0.5<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"A Gutenberg-powered mega menu builder for WordPress. Build rich mega menus visually using the block editor.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/332487","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=332487"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/miketropi"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=332487"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=332487"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=332487"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=332487"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=332487"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=332487"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}