WordPress menu with submenu code
WordPress dynamic menu source code:
File: functions.php
<?php function register_my_menus(){ register_nav_menus( array( 'primary-menu' => 'Header Menu', 'footer-menu' => 'Footer Menu' ) ); } add_action('init', 'register_my_menus'); ?>
File: header.php
<?php wp_nav_menu( array( 'menu' => 'primary-menu', 'container' => false, 'items_wrap' => '<ul class="nav-menu">%3$s</ul>', 'container_class' => false, 'container_id' => false, 'menu_class' => 'nav-menu' ) ); ?>
Output:
WordPress dynamic submenu source code:
File: functions.php
<?php function register_my_sub_menu( $sorted_menu_items, $args ) { if ( isset( $args->sub_menu ) ) { $root_id = 0; foreach ( $sorted_menu_items as $menu_item ) { if ( $menu_item->current ) { $root_id = ( $menu_item->menu_item_parent ) ? $menu_item->menu_item_parent : $menu_item->ID; break; } } if ( ! isset( $args->direct_parent ) ) { $prev_root_id = $root_id; while ( $prev_root_id != 0 ) { foreach ( $sorted_menu_items as $menu_item ) { if ( $menu_item->ID == $prev_root_id ) { $prev_root_id = $menu_item->menu_item_parent; if ( $prev_root_id != 0 ) $root_id = $menu_item->menu_item_parent; break; } } } } $menu_item_parents = array(); foreach ( $sorted_menu_items as $key => $item ) { if ( $item->ID == $root_id ) $menu_item_parents[] = $item->ID; if ( in_array( $item->menu_item_parent, $menu_item_parents ) ) { $menu_item_parents[] = $item->ID; } else if ( ! ( isset( $args->show_parent ) && in_array( $item->ID, $menu_item_parents ) ) ) { unset( $sorted_menu_items[$key] ); } } return $sorted_menu_items; } else { return $sorted_menu_items; } } add_filter( 'my_sub_menu', 'register_my_sub_menu', 10, 2 ); ?>
File: direct_parent.php
<?php wp_nav_menu( array( 'menu' => 'primary-menu', 'sub_menu' => true, 'direct_parent' => true ) ); ?>