缺少 wordpress 菜单中的菜单项 ID


Missing Menu Item id from wordpress menu

我刚刚注意到我的菜单项ID不是由wordpress生成的。

我希望它是这样的

<li id='menu-item-2091' class='menu-item menu-item-209'>
<a href='www.mysite.com/members/<?php echo $user_info->user_login; ?>'>Profile</a></li>

但是我在没有菜单项 ID 的情况下得到这个。

<li class='menu-item menu-item-209'>
<a href='www.mysite.com/members/<?php echo $user_info->user_login; ?>'>Profile</a></li>

此错误发生在我的主菜单中,但我的顶部菜单似乎正确生成了菜单项 ID。

我环顾了一下菜单区域,找不到任何线索,为什么??

这是一个过滤器,可以破解它

add_filter ('wp_nav_menu_items','gfb_missing_id_fix', 10, 2);
function gfb_missing_id_fix($menu, $args) {
    if($args->theme_location == "primary-menu"){
      $dom = new DOMDocument;
      $dom->loadHTML($menu);
      foreach($dom->getElementsByTagName('li') as $element ) {
        $classes = $element->getAttribute("class");
        preg_match("/menu-item-'d+/", $classes, $output_array);
        $element->setAttribute("id", $output_array[0]);
      }
      $menu = $dom->saveHTML();
    }
    return $menu;
}

一般信息

我使用了两次导航(具有不同菜单 ID 的移动和桌面),只有第二个菜单缺少项目 ID。这是有道理的,因为它确保菜单项 ID 只使用一次。

捷讯解决方案

对我来说,下面的javascript/jquery解决方案可以解决问题。它将menu-id-ID(ID 作为实际菜单项 ID)添加到每个菜单项。

var $mainMenu = $("#main-nav"); // your menu_id used in wp_nav_menu
$mainMenu.find("li").each(function(index, element) {
  var $element = $(element);
  var classes = $element.attr("class"),
      ID = classes.match(/menu-item-('d+)/)[1];
    $element.attr("id", "menu-id-" + ID); // here 'menu-id-' is prepended to the actual ID
});