如何为具有子元素的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>\';
}
}
最合适的回答,由SO网友:obiPlabon 整理而成
请看一下这个学步班(Bootstrap Nav Walker) 你会很好地了解助行器内部的工作原理。有一个has_children
中的属性$args
论点$args->has_children
. 您可以使用此选项检查当前项是否有任何子项或与以下代码不同
if ( $args->has_children ) {
// do whatever you want
}