将自定义类添加到有子元素的li元素

时间:2018-02-09 作者:Orkhan Hasanli

如何为具有子元素的li元素输出特定类或其他内容(例如data toggle=“treeview”)?

我使用自定义walker

<?php # -*- coding: utf-8 -*-
/**
 * Create a nav menu with very basic markup.
 *
 * @author Thomas Scholz http://toscho.de
 * @version 1.0
 */
class menu_walker extends Walker_Nav_Menu
{
    /**
     * Start the element output.
     *
     * @param  string $output Passed by reference. Used to append additional content.
     * @param  object $item   Menu item data object.
     * @param  int $depth     Depth of menu item. May be used for padding.
     * @param  array $args    Additional strings.
     * @return void
     */
    public function start_el( &$output, $item, $depth, $args )
    {

        $output     .= \'<li>\';

        $attributes  = \'class="app-menu__item"\';

        ! empty ( $item->attr_title )
            // Avoid redundant titles
            and $item->attr_title !== $item->title
            and $attributes .= \' title="\' . esc_attr( $item->attr_title ) .\'"\';

        ! empty ( $item->url )
            and $attributes .= \' href="\' . esc_attr( $item->url ) .\'"\';



        $attributes  = trim( $attributes );
        $title       = apply_filters( \'the_title\', $item->title, $item->ID );
        $font_awesome = get_field(\'font_awesome\', $item);
        // $item_output = "$args->before<a $attributes>$args->link_before$title</a>"
        //              . "$args->link_after$args->after";

        $item_output = "$args->before"
                        . "<a $attributes>"
                        . "<i class=\'app-menu__icon " . $font_awesome ."\'></i>"
                        . "$args->link_before"
                        . "$title"
                        . "</a>"
                        . "$args->link_after"
                        . "$args->after";

        // Since $output is called by reference we don\'t need to return anything.
        $output .= apply_filters(
            \'walker_nav_menu_start_el\'
            ,   $item_output
            ,   $item
            ,   $depth
            ,   $args
        );
    }

    /**
     * @see Walker::start_lvl()
     *
     * @param string $output Passed by reference. Used to append additional content.
     * @return void
     */
    public function start_lvl( &$output )
    {
        $output .= \'<ul class="treeview-menu">\';
    }

    /**
     * @see Walker::end_lvl()
     *
     * @param string $output Passed by reference. Used to append additional content.
     * @return void
     */
    public function end_lvl( &$output )
    {
        $output .= \'</ul>\';
    }

    /**
     * @see Walker::end_el()
     *
     * @param string $output Passed by reference. Used to append additional content.
     * @return void
     */
    function end_el( &$output )
    {
        $output .= \'</li>\';
    }
}

1 个回复
最合适的回答,由SO网友:obiPlabon 整理而成

请看一下这个学步班(Bootstrap Nav Walker) 你会很好地了解助行器内部的工作原理。有一个has_children 中的属性$args 论点$args->has_children. 您可以使用此选项检查当前项是否有任何子项或与以下代码不同

if ( $args->has_children ) {
    // do whatever you want
}

结束

相关推荐

如何在Category Walker的Start LVL方法中获取Term id?

我想用wp_list_categories 为了帮助我操作列表类,我希望在start_lvl 方法,所以我尝试使用$category->term_id 但是抛出了错误。现在我只想在start_lvl 方法来匹配我在start_el 输出,请在下面的类中检查此行$output .= \"<span id=\\\"$category->term_id\\\" class=\\\"toggle\\\" onClick=\\\"toggleMe(this.id);\\\" style=\\\"c