具有以下功能:
class my_walker extends Walker_Nav_Menu {
function start_el(&$output, $item, $depth, $args) {
global $wp_query;
$indent = ( $depth ) ? str_repeat("\\t", $depth) : \'\';
$class_names = $value = \'\';
$classes = empty($item->classes) ? array() : (array) $item->classes;
$classes[] = \'menu-item-\' . $item->ID;
$class_names = join(\' \', apply_filters(\'nav_menu_css_class\', array_filter($classes), $item));
$class_names = \' class="\' . esc_attr($class_names) . \'"\';
$id = apply_filters(\'nav_menu_item_id\', \'menu-item-\' . $item->ID, $item, $args);
$id = strlen($id) ? \' id="\' . esc_attr($id) . \'"\' : \'\';
$output .= $indent . \'<li\' . $id . $value . $class_names . \'>\';
$attributes = !empty($item->attr_title) ? \' title="\' . esc_attr($item->attr_title) . \'"\' : \'\';
$attributes .= ! empty($item->target) ? \' target="\' . esc_attr($item->target) . \'"\' : \'\';
$attributes .= ! empty($item->xfn) ? \' rel="\' . esc_attr($item->xfn) . \'"\' : \'\';
$attributes .= ! empty($item->url) ? \' href="\' . esc_attr($item->url) . \'"\' : \'\';
$item_output = $args->before;
$item_output .= \'<a\' . $attributes . \'>\';
$item_output .= $args->link_before . apply_filters(\'the_title\', $item->title, $item->ID) . $args->link_after;
$item_output .= \'</a>\';
$item_output .= $args->after;
$output .= apply_filters(\'walker_nav_menu_start_el\', $item_output, $item, $depth, $args);
}
}
我需要添加我自己的计数器,而不是item->ID来添加$myCounter(这将增加)。
这是:
$id = apply_filters(\'nav_menu_item_id\', \'menu-item-\' . $item->ID, $item, $args);
对此:
$id = apply_filters(\'nav_menu_item_id\', \'menu-item-\' . $myCounter, $item, $args);
我想调整到疯狂的css菜单。我该怎么做?
提前谢谢。
最合适的回答,由SO网友:Rarst 整理而成
您是否需要修改walker或未经修改地将其钩住?
由于为该id提供了过滤器,因此很容易挂钩。试试这个:
add_filter( \'nav_menu_item_id\', \'modify_menu_item_id\' );
function modify_menu_item_id( $text ) {
static $myCounter;
if( !isset( $myCounter ) )
$myCounter = 0;
return \'menu-item-\' . ++$myCounter;
}
Update 更换助行器
// add to start of start_el method
static $myCounter;
if( !isset( $myCounter ) )
$myCounter = 0;
以及
// change id lines to this
$id = $args->depth ? \'menu-item-\' . $item->ID : \'menu-item-\' . ++$myCounter;
$id = apply_filters(\'nav_menu_item_id\', $id, $item, $args);
$id = strlen($id) ? \' id="\' . esc_attr($id) . \'"\' : \'\';
我试图通过检查当前深度来排除子菜单,我认为它应该可以与多个菜单一起正常工作,因为每个菜单都会得到walker对象的新实例。