我刚刚注意到我的菜单项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
});