Отображение имени меню с помощью wp_nav_menu

15 мар. 2012 г., 19:19:57
Просмотры: 33.9K
Голосов: 18

У меня есть произвольное меню, которое я успешно вызываю с помощью wp_nav_menu. Есть ли способ отобразить название меню внутри тега h3 перед самим меню?

Пример:

<h3>Название моего меню</h3>
<nav>
<ul>
<li>Пункт меню 1</li>
<li>Пункт меню 2</li>
</ul>
</nav>
0
Все ответы на вопрос 3
2
17

Если вам известен слаг меню, то задача упрощается, в противном случае можно использовать эту функцию для получения меню в указанном месте.

<?php
function wpse45700_get_menu_by_location( $location ) {
    if( empty($location) ) return false;

    $locations = get_nav_menu_locations();
    if( ! isset( $locations[$location] ) ) return false;

    $menu_obj = get_term( $locations[$location], 'nav_menu' );

    return $menu_obj;
}
?>

Затем

//если вам нужно меню с определенным ID / Slug
//$menu_obj =wp_get_nav_menu_object($id_slug_or_name); 

//если вам нужно меню в определенном месте
$menu_obj = wpse45700_get_menu_by_location($location); 

echo "<h3>".esc_html($menu_obj->name)."</h3>";
//Отобразить меню здесь

Или вместо вывода HTML можно передать его как часть аргумента для атрибута items в wp_nav_menu.

Например, для отображения меню в месте 'primary':

$location = 'primary';
$menu_obj = wpse45700_get_menu_by_location($location ); 
wp_nav_menu( array('theme_location' => $location, 'items_wrap'=> '<h3>'.esc_html($menu_obj->name).'</h3><ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>') ); 
15 мар. 2012 г. 19:56:06
Комментарии

Стивен, спасибо за отличный ответ. Извините за мой нубский вопрос, но не могли бы вы предоставить код для передачи HTML в качестве аргумента? Это решило бы все проблемы. Спасибо!

csi csi
15 мар. 2012 г. 20:02:16

Смотрите обновлённый ответ :D

Stephen Harris Stephen Harris
15 мар. 2012 г. 20:18:24
0

Замените id 4 ниже на id вашего меню. Если вы не знаете id, перейдите на страницу меню в админке, кликните правой кнопкой мыши на вкладке меню, для которого нужно вывести заголовок, выберите "Просмотреть код" и id будет указан как menu=ID в ссылке.

<?
$_menu_object = wp_get_nav_menu_object( 4 );
$nav_menu_selected_title = $_menu_object->name;
echo $nav_menu_selected_title;
?>
6 мар. 2013 г. 22:23:14
0

ответ Стивена хорош. но я пошел на шаг дальше:

<?php 
$location = 'footer_navigation3';
if (has_nav_menu($location)) :
    $menu_obj = get_menu_by_location($location); 
    wp_nav_menu( array( 
        'theme_location'  => $location,
        'items_wrap'=> '<strong>'.esc_html($menu_obj->name).'</strong><ul id="%1$s" class="%2$s">%3$s</ul>'
    )); 
endif;
?>

предполагая, что вы зарегистрировали расположение темы под названием "footer_navigation3" и назначили меню WordPress для этого расположения. теперь разместите этот код там, где вы хотите отобразить ваше меню.

25 июл. 2015 г. 14:20:40