2015-06-15 2 views
1

Я только что заметил, что идентификатор пунктов меню не генерируется wordpress.Отсутствует пункт меню Item из меню 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> 

но я получаю это без идентификатора пункта меню.

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

Эта ошибка возникает в моем основном меню, но мое верхнее меню, похоже, правильно генерирует идентификатор элемента меню.

Я просмотрел область меню и не могу найти никаких подсказок почему?

+0

Пожалуйста, ознакомьтесь с https://codex.wordpress.org/Function_Reference/wp_nav_menu – odedta

+0

вам нужно удостоверение личности, может быть, вы могли бы использовать уникальный класс? –

+0

@ToniLeigh Мне нужен идентификатор для дополнительных ссылок Google для правильной работы –

ответ

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

Общая информация

я использовать навигацию в два раза (мобильный и рабочий стол с различными идентификаторами меню) и только второе меню отсутствует пункт идентификаторы. Это имеет смысл, потому что это гарантирует, что идентификаторы элементов меню используются только один раз.

JQuery Решение

Для меня следующее решение JavaScript/JQuery делает трюк. Он добавляет menu-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 
});