2021年1月28日星期四

wp_get_nav_menu_items multi level submenu

I am trying to create my own menu in WordPress with a submenu that holds items ass well e.g.:

       <li>          <a href="#">Nav Link</a>            <ul>              <li><a href="#">Sub Nav Link</a></li>              <li><a href="#">Sub Nav Link</a>                <ul>                  <li><a href="#">2nd Sub Sub Nav Link</a></li>                  <li><a href="#">2nd Sub Sub Nav Link</a></li>                  <li><a href="#">2nd Sub Sub Nav Link</a></li>                </ul>              </li>              <li><a href="#">Sub Nav Link</a></li>              <li><a href="#">Sub Nav Link</a></li>            </ul>          </li>  

I have this function:

function wp_get_menu_array($current_menu) {    $array_menu = wp_get_nav_menu_items($current_menu);    $menu = array();    foreach ($array_menu as $m) {        if (empty($m->menu_item_parent)) {            $menu[$m->ID] = array();            $menu[$m->ID]['ID']          =   $m->ID;            $menu[$m->ID]['title']       =   $m->title;            $menu[$m->ID]['url']         =   $m->url;            $menu[$m->ID]['children']    =   array();        }    }    $submenu = array();    foreach ($array_menu as $m) {        if ($m->menu_item_parent) {            $submenu[$m->ID] = array();            $submenu[$m->ID]['ID']       =   $m->ID;            $submenu[$m->ID]['title']    =   $m->title;            $submenu[$m->ID]['url']      =   $m->url;            $menu[$m->menu_item_parent]['children'][$m->ID] = $submenu[$m->ID];        }    }    return $menu;  }  

And to render the nav:

<?php foreach ($menu_items as $item) : ?>  <?php $current = ( $item->object_id == get_queried_object_id() ) ? 'current' : '' ?>  <li class="nav-item">      <a class="nav-link <?= $current ?>" href="<?= $item['url'] ?>" title="<?= $item['title'] ?>"><?= $item['title'] ?></a>      <?php if( !empty($item['children']) ):?>      <ul class="sub-menu">      <?php foreach($item['children'] as $child): ?>          <li class="b-main-header__sub-menu__nav-item">          <a href="<?= $child['url'] ?>" title="<?= $child['title'] ?>"><?= $child['title'] ?></a>          </li>      <?php endforeach; ?>      </ul>      <?php endif; ?>  </li>  <?php endforeach; ?>  

I just cannot figure how I would implement a multi level submenu. At the moment when I create a submenu which holds items as well it will create those items as individual menu items.

Hope my clarification is well enough and somebody can help me out here.

https://stackoverflow.com/questions/65947833/wp-get-nav-menu-items-multi-level-submenu January 29, 2021 at 10:06AM

没有评论:

发表评论