PHP / Wordpress-добавление стрелок в родительские меню

можно ли добавить какой-то класс, например "стрелка" или промежуток внутри меню, которые имеют подменю (в Wordpress)? кажется, что вы можете сделать это с помощью javascript, но я хочу знать, есть ли решение PHP...

в WP 3.0 я видел, что активные меню имеют классы" родитель "или" предок " на них, но это только для активного меню, и мне это нужно для неактивных, а также

6 ответов


эта функция действительно должна быть в ядре WordPress!
Во всяком случае, я посмотрел на источник шаблона меню, который вы отправили в комментарии к другому ответу, и нашел (довольно хакерский) способ добавить класс в пункты меню с детьми. Он в основном подклассы по умолчанию walker, чтобы расширить его поведение по умолчанию. Вероятно, лучше всего, если вы поместите его в свою тему functions.php. Вот код:

<?php
class Arrow_Walker_Nav_Menu extends Walker_Nav_Menu {
    function display_element($element, &$children_elements, $max_depth, $depth=0, $args, &$output) {
        $id_field = $this->db_fields['id'];
        if (!empty($children_elements[$element->$id_field])) { 
            $element->classes[] = 'arrow'; //enter any classname you like here!
        }
        Walker_Nav_Menu::display_element($element, $children_elements, $max_depth, $depth, $args, $output);
    }
}
?>

чтобы вызвать его, вам нужно добавить walker аргумент при вызове wp_nav_menu() в вашей теме, Вот так:

<?php 
wp_nav_menu(array('walker' => new Arrow_Walker_Nav_Menu, [other arguments...]))
?>

надеюсь, что это работает для вас! Я проверил его только поверхностно, но, кажется, он работает. Дайте мне знать, если есть какие-либо крайние случаи, когда добавление класса не удается.


Я не знаю никакой родной поддержки WordPress для него, но вы можете легко сделать это, используя некоторые jQuery.

<script type="text/javascript">
$("#menu-id ul li:has(ul)").addClass("parent");
</script>

Если вы похожи на меня и хотите добавить стрелку HTML в промежуток к родительскому пункту меню, добавьте строку, подобную этой внутри класса ходока клиента Дональда Харви:

$element->title .= '<span class="caret down-caret">&#x25BC;</span>'; 

вы также можете добавить этот HTML непосредственно в метку меню на странице WP admin > menu, но это не лучший способ сделать это.

Я немного написал об этом здесь http://cameronnokes.com/blog/adding-an-icon-to


просто вставьте это в свой код css, и он будет работать так, как ожидалось.

.nav-menu li > a:after {
    color: #888;
    content: ' ▾';
}

.nav-menu li > a:hover:after {
    color: #444;
    content: ' ▾';
}

.nav-menu li > a:only-child:after {
    content: '';
}

Ps. Не забудьте установить свою страницу UTF-8


простой и скромный способ добавить родительский класс в Главное меню, если он имеет подменю

<script type="text/javascript">
jQuery(document).ready(function($) {
    $("ul.sub-menu").parents().addClass('parent');  
});
 </script>

и

    <style type="text/css">
       .main-navigation .parent > a, .main-navigation .parent > a:hover {
            background-image: url("images/arrow.png");
            background-position: right center;
            background-repeat: no-repeat;
     }  

    </style>

Я не знаю, что это вопрос, но мы можем добавить стрелку в меню css такой:

.menu li > a:after {
    color: #fff;
    content: ' ▾';
}

.menu li > a:only-child:after {
    content: '';
}