В функции
wp_nav_menu()
есть фильтр
wp_nav_menu_items
<li id="menu-item-265" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-265">
<a href="http://wp-test.ru/post-99">Обратная связь</a>
</li>
<li id="menu-item-266" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-266">
<a href="http://wp-test.ru/post-98">Все статьи</a>
</li>
В нем разметка примерно такого вида, менять ее достаточно сложно, для парсинга HTML я использую
Simple HTML Dom Parser
Еще один вариант — переписать полностью
Walker, но этот вариант еще сложнее предыдущего
Самый простой вариант — получить массив элементов меню с помощью функции
wp_get_nav_menu_items()
и вывести свою разметку
// Получаем элементы меню по ID.
$nav_menu_items = wp_get_nav_menu_items( $menu_id );
// Или получаем элементы меню по location.
$menu_location = 'primary';
$locations = get_nav_menu_locations();
if ( isset( $locations[ $menu_location ] ) ) {
$nav_menu_items = wp_get_nav_menu_items( $locations[ $menu_location ] );
}