Добавление пользовательского HTML-кода в функцию wp_nav_menu

14 июл. 2013 г., 21:20:48
Просмотры: 22.2K
Голосов: 5

Я хочу добавить пользовательский HTML-код в функцию wp_nav_menu в WordPress, чтобы добавить модальное окно bootstrap к ссылке в навигационном меню, но не уверен, как это сделать. Пост https://stackoverflow.com/questions/12250866/how-to-add-custom-html-to-wp-nav-menu частично объясняет, как это сделать путем расширения класса walker.

Моя цель - создать следующую разметку с помощью класса walker для создания пользовательского HTML-кода в конце.

<div class="menu-primary-navigation-container">
    <ul id="navigation" class="clearfix">
        <li id="menu-item-275" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-273 current_page_item menu-item-275">
            <a href="http://sandpit.jonathanbeech.co.uk/">Главная</a>
        </li>
        <li id="menu-item-17" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-17">
            <a href="http://sandpit.jonathanbeech.co.uk/about/">О нас</a>
        </li>
        <li id="menu-item-191" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-191">
            <a href="http://sandpit.jonathanbeech.co.uk/portfolio-two/">Портфолио</a>
        </li>
        <li id="menu-item-269" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-269">
            <a href="http://sandpit.jonathanbeech.co.uk/articles/">Статьи</a>
        </li>
        <li>
            <a href="#myModal" role="button" data-toggle="modal">Контакты</a>
        </li>
    </ul>
</div>

У меня возникают трудности с тем, как изменить код start_el и end_el, чтобы получить код в последнем элементе списка, так как мои навыки PHP не очень хороши.

Есть предложения?

class Custom_Walker_Nav_Menu extends Walker_Nav_Menu {
    function start_el ( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        // Скопируйте весь код start_el из источника и измените
    }

    function end_el( &$output, $item, $depth = 0, $args = array() ) {
        // Скопируйте весь код end_el из источника и измените
    }
}
0
Все ответы на вопрос 1
0
11

Чтобы добавить последний пункт списка, вам не нужен пользовательский Walker. Существует хук, который позволит вам добавить его.

function add_last_nav_item($items) {
  return $items .= '<li><a href="#myModal" role="button" data-toggle="modal">Контакты</a></li>';
}
add_filter('wp_nav_menu_items','add_last_nav_item');

Вам всё равно не нужно было бы редактировать start_el и end_el. Они генерируют отдельные пункты списка. Это не место для добавления нового элемента. Думаю, вам, вероятно, нужно было бы подняться к родительскому классу Walker для Walker_Nav_Menu, чтобы найти место, где можно добавить новые пункты, но не стоит тратить усилия только для добавления элементов.

14 июл. 2013 г. 21:32:18