Окт
5
48

Вывод меню с помощью функции wp_nav_menu

wodrpress менюВ позапрошлой статье блога я писал про интересное нововведения последней версии wordpress — специальный механизм создания и управления меню в wordpress 3.0.  Теперь стало намного удобнее и проще обычным пользователям создавать различные по сложности меню, которые могут состоять не только страницы или категории блога, но и иметь ссылки на любые URL. Для отображения меню в шаблоне используется специальная функция wp_nav_menu — про нее сегодня и расскажу.

Если в админке wordpress нету раздела меню, то его можно активировать добавлением специального кода в файл functions.php

<?php
if (function_exists('add_theme_support')) {
    add_theme_support('menus');
}
?>

Далее создаете меню в соответствующему пункте раздела «Внешний вид» (Appearence). После этого в шаблоне блога в нужном нам месте выводим само меню через код:

<?php wp_nav_menu('menu=first'); ?>

Здесь first — название созданного нами меню. Это использование функции в общем случае без виджетов, с ними там нужно будет немного по другому работать. Тем не менее функция wp_nav_menu может выводиться и без аргументов, в результате чего будут «просматриваться» разные ситуация — сначала совпадение по названию меню, если для него указан хотя бы один пункт меню, в противном случае будет просто отображено непустое меню ну и т.п. Но опять же советую просто использовать приведенный выше код и не разбираться потом что должна выводить функция без аргументов. Ее синтаксис выглядит следующим образом:

<?php wp_nav_menu($args); ?>

Здесь используются следующие параметры:

$menu — выбранный идентификатор для меню — ID, slug или название меню.

$container — меню UL по умолчанию «оборачивается» в контейнер DIV с помощью данной настройки.

$container_class — указывает класс контейнера, по умолчанию его значение  menu-{menu slug}-container, то есть в нашем случае, например, будет класс menu-first-container.

$container_id — можно добавить контейнеру ID, по умолчанию не указано.

$menu_class — класс для элемента меню UL, его значение — menu.

$menu_id  — ID для элемента ul, по умолчанию равно значению menu-{slug}

$echo — если вы не хотите отображать меню, а возвращать значение функции используйте для этой настройки значение 0.

$fallback_cb — если меню не существует, вызывается функция wp_page_menu.

$before — задает текст, который выводится перед ссылкой А.

$after — текст после ссылки А, по умолчанию он, как и предыдущий, пустые.

$link_before — выводит фразу перед текстом ссылки, не задано.

$link_after — выводится после текста ссылки, тоже пустое.

$depth — задает количество уровней иерархии для вывода меню, значение по умолчанию 0 выводит все меню целиком.

$walker — какой-то непонятный пользовательский «walker object», наверное больше понадобится продвинутым разработчикам.

$theme_location — локация темы, где будет использовано меню, должна быть активирована через register_nav_menu() для того чтобы пользователь смог ее выбирать. Тоже какая-то не совсем понятная настройка, судя по всему, при работе с виджетами.

Примеры использования функции wp_nav_menu

Самый простой код, приведенный в кодексе:

<div class="access">
  <?php wp_nav_menu(); ?>
</div>

Хотя, как я говорил выше, лучше всего сразу указывать название меню дабы не возникало разногласий.

Меняем класс для элемента меню UL

<?php wp_nav_menu('menu=first&menu_class=my-main-menu'); ?>

Убираем контейнер DIV из меню

<?php wp_nav_menu('menu=first&container='); ?>

либо как сказано в кодексе

<?php wp_nav_menu( array( 'container' => '' ) ); ?>

В принципе, ничего сложного в создании и управлении меню wordpress 3.0 нет. Разработчики значительно упростили процедуру работы и расширили возможности данного элемента навигации. Решение часто используется во множестве задач по шаблону, например, при создании разного меню в WordPress для мобильной и десктопной версией. Чуть позже добавлю еще парочку сниппетов по теме.

P.S. Постовой. Интересный и полезный вебмастерам Блог по SEO, где вы найдете ответы на интересующие вас вопросы по seo.
Компания Aweb уже давно и очень хорошо зарекомендовала себя в области услуг раскрутка сайта, оптимизация и поисковое продвижение в интернете.

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 10, средний балл: 5,00 из 7)
Загрузка...

категория Категории: Возможности;
теги Теги: , , , , .

комментариев 48 к статье “Вывод меню с помощью функции wp_nav_menu”

  • ADv   30.06.2012

    Выводится именно через wp_nav_menu (через wp_page_menu — да, сортировку можно изменить аргументами функции). Проблема собственно в том, что эта wp_nav_menu видимо не поддерживает такие аргументы.
    И разве можно через админку менять очередность созданных страниц? Я их создавал в том порядке, в котором хотел чтобы они выводились. Ан нет, сортируются по алфавиту..

  • Tod   30.06.2012

    ADv, ну, насколько я вижу в функции нет параметра для сортировки. Порядок задается именно в админке и по идее должен соблюдаться, так что глюк где-то в этой области.

  • Антон   01.07.2012

    Большое спасибо, долго искал способ как добавить второе меню в шапку. Рабочий и понятный способ нашел только у Вас. Удачи и процветания Вашему сайту!!!

  • eco   15.01.2013

    Вы помогли мне решить проблему, которая мне досаждала больше года. Респект Вам!

  • Сергей   04.11.2013

    Здравствуйте.
    Помогите, пожалуйста.
    Вывожу меню.
    Код:
    theme_get_option(‘theme_menu_source’),
    ‘depth’ => theme_get_option(‘theme_menu_depth’),
    ‘menu’ => ‘primary-menu’,
    ‘class’ => ‘art-hmenu’
    )
    );
    ?>

    Код ссылки в пункте меню:
    АНКОР

    ВОПРОС.
    Как сделать, чтобы атрибут titile не выводился для этих ссылок. Он очень мешает, так как закрывает пункты меню.

    Заранее спасибо!

  • Tod   04.11.2013

    Сергей, на ум приходит вариант с вызовом функции с параметром echo=0 и последующей обработкой (удалением атрибута title) — по аналогии с этим постом.

  • adward   26.03.2014

    Клиент требует убирать из меню те страницы сайта (меню основано на страницах), для которых стоит статус «Черновик» или «На утверждении».

    Можно ли каким нибудь способом, либо:
    a) не формировать это меню в момент сборки, или же
    б) присваивать такому пункту какой либо, скажем, класс, например class=»hiddenitem»

    В данный момент меню формируется следующим образом:

    $args = array(
    ‘theme_location’=>’equipment-menu’,
    ‘container’=>’div’,
    ‘container_class’=>’children_menu_top’,
    ‘container_id’=>’menu’,
    ‘menu_class’=>’sf-menu’,
    ‘menu_id’=>’children_menu’,
    ‘before’=>»,
    ‘after’=>»,
    ‘fallback_cb’=>false
    );
    wp_nav_menu($args);

  • Tod   26.03.2014

    adward, вы уверены, что эти пункты меню вообще показываются? мне казалось функция их не отображает. Можно, конечно, не выводить меню (параметр $echo) а для начала его обработать, проверив статус каждого элемента (пункта меню), но я не замечал там данных о том черновик ли это или опубликованная статья.

  • adward   26.03.2014

    Мне подсказали.
    Если вписать в functions.php следующий хук:

    add_filter(‘nav_menu_css_class’ , ‘nav_menu_add_post_status_class’ , 10 , 2);
    function nav_menu_add_post_status_class($classes, $item)
    {
    $post_status = get_post_status($item->object_id);
    $classes[] = $post_status;
    return $classes;
    }

    то к пунктам меню дш будут присваиваться классы publish,draft, и так далее в зависимости от статуса.

  • Tod   27.03.2014

    adward, спасибо за подсказку) полезный хак.

  • SOVA   07.11.2014

    а как к меню, выведенному через функции wp_nav_menu, к заданным пунктам вывести сбоку от текста картинку?

  • Tod   07.11.2014

    SOVA, это можно сделать с помощью шрифта Font Awesome.

  • Дмитрий   23.11.2014

    Здравствуйте. При помощи этой функции

    ‘primary’, ‘before’=> »,’after’ => »,) ); ?>

    происходит вывод меню. Но когда я добавляю цикл вывода постов в главной области шаблона, при переходе по элементам меню (по страницам, которые были ранее созданы в админке и добавлены в меню) я наблюдаю следующее: на каждой созданной странице из меню публикуется пост с содержанием названия страницы (именно страницы) и дата его создания. При этом записей (постов) вообще нет. Вывод постов делаю самым простым циклом. Вопрос: какого …. WP видит страницы как записи (посты) и их публикует?

  • Tod   24.11.2014

    Дмитрий, понимаю, что фраза «где-то вы ошиблись» не прояснит ситуацию, но мне сложно так сориентироваться сходу в проблеме.
    Я бы еще раз все хорошенько проверил, но если все равно ничего не работает (бывает пропустил какую-то мелочь и в упор ее не видно), то я бы взял обычный простой шаблон скопировал бы оттуда файл page.php, который отвечает за шаблон страницы и добавил бы себе в блог. Если глюк остается, то искать ошибку надо в других файлах, в частности в header.php. Файл страницы вообще не имеет никакого отношения к шаблону вывода постов и к меню, ошибка где-то в другом месте. Попробуйте вывести меню с помощью функции wp_nav_menu вообще без дополнительных параметров, только с названием меню.

  • Дмитрий   24.11.2014

    Tod, Вы попали прям в яблочко… дважды. Первое: это была невнимательность; второе: не создан файл page.php (хотя я радостно верил что он есть). Спасибо за быстрый ответ. Если бы сегодня днем не заметил, то, после прочтения, точно бы исправил. =)

  • Андрей   25.02.2015

    Привет. Парни! Вы такие молодцы….
    А у меня после плагина очередного пропал из меню WP раздел Тheme Options.
    Помогите престарелому ламеру — напишите плиз что и куда, Прасти Оспади, вставить.
    Мерси!

  • Tod   26.02.2015

    Андрей, плагины есть разные, некоторые не сопоставимы с той или иной версией системы или же просто не особо хорошие. Если после установки модуля что-то ломается, то лучше его отключить. Если можно отключить из админки, если нет удалить с ФТП. Как правило, для нужных задач есть 2-3 аналогичных плагина.

  • Валерий   13.01.2019

    Отличный урок, спасибо!

Оставить комментарий


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Лучшее в категории

Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости