@bigvoodoo, @firejdl, @thatElectricFeel
Enhancements to the wp-admin Menu interface that allow for faster, more robust, and easier to edit menus. Also includes a Related Links Menu.
This is a plugin for WordPress 3.5+ that enhances the Menu experience in several ways:
- adds enhancements to the wp-admin Menu interface (see below)
- saves menus to its own table to speed up generation of menus on the front-end
- adds two shortcodes to displays menus from the admin interface -
[mega_menu]
&[related_links]
(see the Installation section)
License: GPLv2 or later
- Adds the ability to add a Shortcode and/or custom HTML to any menu! Now you can display forms, widgets, anything you want inside of a menu.
- Adds the ability to add a "Column/Section" to any menu, which allows for logical division of menu items and both simpler and stronger styling.
- Columns/Sections can have an optional header with an optional link.
- Adds the ability to add an existing menu to a menu. Menu items that repeat in several different places can be created as a menu and added multiple times.
- Menus can have an optional header with an optional link.
- Adds a button to the menu item options to add descendents of page in the WP page hierarchy.
- WordPress 3.5+
- PHP 5.3+
- improve documentation (including this document)
- i18n/L10n
- Gecka Submenu
- Add Descendents as Submenu Items
- Custom Post Type's Archive in WP Nav Menu
- /wp-admin/includes/nav-menu.php:
wp_nav_menu_item_link_meta_box()
- Big Voodoo Interactive for letting me write and open-source this plugin :)
- Install the plugin in WordPress & activate it.
- register a menu location in your theme.
- Setup the menu hierarchy under Appearance -> Menu.
- Assign the menu from step 3 to the menu location in step 2.
- Use one of the shortcodes to display a menu.
[mega_menu]
Given a theme_location
attribute, this shortcode displays a ul-style Mega Menu for the menu assigned to that location, which can be easily styled with CSS in your theme.
Options:
theme_location
: The location in the theme to be used - must be registered withregister_nav_menu()
in order to be selectable by the user. requiredbefore
: Output text before the<a>
of the linkafter
: Output text after the</a>
of the linklink_before
: Output text before the link textlink_after
: Output text after the link textajax
: if "true", loads the Mega part of the menu via AJAX.
Example:
[mega_menu theme_location="mega" before="<div class='surround'>" after="</div>" link_before="<span>" link_after="</span>"]
[related_links]
Given a theme_location
attribute, the shortcode displays a Related Links Menu for the menu assigned to that location, which shows either children, siblings, or top-level pages (chosen in that order).
Options:
theme_location
: The location in the theme to be used - must be registered withregister_nav_menu()
in order to be selectable by the user. requiredbefore
: Output text before the<a>
of the linkafter
: Output text after the</a>
of the linklink_before
: Output text before the link textlink_after
: Output text after the link text
Example:
[related_links theme_location="mega"]
walker_nav_menu_start_el
Allows modification of the $output
, called when the Walker has created an <li>
and started populating it.
Arguments:
$output
: the output for the menu so far.$item
: the current menu item.$depth
: the current depth.$args
: the arguments passed toWalker_Nav_Mega_Menu
.
Example:
function override_nav_menu_start_el( $output, $item, $depth, $args ) {
if( $args->menu_type == 'mega' && $depth == 0 && $args->ajax !== "true" ) {
// add header
$output .= '<h2>' . get_the_title( $item->post_id ) . '</h2>';
}
return $output;
}
add_filter( 'walker_nav_menu_start_el', 'override_nav_menu_start_el', 99, 4 );
walker_nav_menu_end_el
Allows modification of the $output
, called before the Walker adds </li>
and after any children are added to the $output
.
Arguments:
$output
: the output for the menu so far.$item
: the current menu item.$depth
: the current depth.$args
: the arguments passed toWalker_Nav_Mega_Menu
.
Example:
function override_nav_menu_end_el( $output, $item, $depth, $args ) {
if( $args->menu_type == 'mega' && $depth == 0 && $args->ajax !== "true" ) {
// add footer
$output .= '<div class="menu_footer">footer for ' . get_the_title( $item->post_id ) . '</div>';
}
return $output;
}
add_filter( 'walker_nav_menu_end_el', 'override_nav_menu_end_el', 99, 4 );
-
Always include custom pages in related links menus
Custom pages all have a post_id of 0, which will break our check for duplicate pages. Therefore, we should include all custom pages.
- fixed several bugs
- added simple timeout for moving the mouse into/out of the target
- added options to use some basic default JS & CSS
- added ability to load Mega part of the menu via AJAX
- fixed some bugs
- complete rewrite from the ground up
- initial release
-
Always include custom pages in related links menus
Custom pages all have a post_id of 0, which will break our check for duplicate pages. Therefore, we should include all custom pages.
- fixed several bugs
- added simple timeout for moving the mouse into/out of the target
- added options to use some basic default JS & CSS
- added ability to load Mega part of the menu via AJAX
- fixed some bugs
- complete rewrite from the ground up
- initial release