在wp_menus3中应用我自己的css类?

时间:2010-10-08 作者:user1147

具有以下功能:

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菜单。我该怎么做?

提前谢谢。

1 个回复
最合适的回答,由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对象的新实例。

结束

相关推荐