Skip to content

Instantly share code, notes, and snippets.

@mrkkr
Last active January 17, 2020 10:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrkkr/0340f40c7de45261e671292c8be11e89 to your computer and use it in GitHub Desktop.
Save mrkkr/0340f40c7de45261e671292c8be11e89 to your computer and use it in GitHub Desktop.
Generate multilevel nested menu in Wordpress using recursion function
<?php
/**
* Custom menu generator
*/
function generateTreeNavwalker(array &$menuItems, $parentId = 0) {
$branch = array();
foreach ($menuItems as &$item) {
if ($item->menu_item_parent == $parentId) {
$children = generateTreeNavwalker($menuItems, $item->ID);
if ($children) {
if (!$item->submenu_items) {
$item->submenu_items = array();
}
$item->submenu_items = $children;
}
$branch[$item->ID] = $item;
unset($menuItems[$item->ID]);
}
}
return $branch;
}
/**
* Output Custom Menu
*/
function outputCustomMenuNavwalker(array &$menuItems, $parentId = 0) {
foreach ($menuItems as &$item) {
if ($item->menu_item_parent == $parentId) {
$menuHtml .= '<li class="nav-item menu-item item-'.$item->object_id.'">
<a class="nav-link" href="'.$item->url.'">'.$item->title.'</a>';
$subMenu = outputCustomMenuNavwalker($menuItems, $item->ID);
if ($subMenu) {
$menuHtml .= '<ul class="dropdown-menu">';
$menuHtml .= $subMenu;
$menuHtml .= '</ul>';
}
$menuHtml .= '</li>';
}
}
return $menuHtml;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment