我刚刚注意到我的菜单项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。
我环顾了菜单区域,无法找到任何线索?
答案 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
});