从wordpress菜单中缺少菜单项ID

时间:2015-06-15 10:48:03

标签: php jquery css 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。

我环顾了菜单区域,无法找到任何线索?

2 个答案:

答案 0 :(得分:1)

这是一个破解它的过滤器

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;
}

答案 1 :(得分:0)

一般信息

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

JQuery解决方案

对我来说,以下javascript / jquery解决方案可以解决问题。它将menu-id-ID(ID作为实际的menu-item-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
});