自定义漫游导航-将序列号添加为类

时间:2014-01-10 作者:Doidgey

我现在正在努力练习助行器,但我需要一些帮助来达到我想要的效果。

我的walker函数如下所示:

class ik_walker extends Walker_Nav_Menu{
    //start of the sub menu wrap
    function start_lvl(&$output, $depth) {
        $output .= \'<nav class="site-navigation" role="navigation">
                        <ul>\';
    }
    //end of the sub menu wrap
    function end_lvl(&$output, $depth) {
        $output .= \'
                    </ul>
            <button id="menu" class="menu-button" type="button" role="button" aria-label="Menu Toggle">
              <span class="icon-menu"></span>
            </button>
        </div>\';
    }
    //add the description to the menu item output
    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;
        $class_names = join( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item ) );
        $class_names = \' class="\' . esc_attr( $class_names ) . \'"\';
        $output .= $indent . \'<li id="menu-item-\'. $item->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;
        if(strlen($item->description)>2){ $item_output .= \'<br /><span class="sub">\' . $item->description . \'</span>\'; }
        $item_output .= \'</a>\';
        $item_output .= $args->after;
        $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
    }
}
我需要的是每个ali 拥有自己的课程c 然后是一个数字-从1开始。

<a href="[link]" class="c1"></a>
<a href="[link]" class="c2"></a>
<a href="[link]" class="c3"></a>
然后我需要一个span 在每个a之后,有一个类的时候我可以指定一个地方,如果可能的话?我知道如何获得span 在那里,但我无法从我的搜索中找出您是否确实可以设置特定的单独类,因为我需要执行以下操作:

<span class="paw-icon"></span>
任何帮助都将不胜感激。

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

可以这样尝试:

class ik_walker extends Walker_Nav_Menu {

    function start_lvl(&$output, $depth) {
        $GLOBALS[\'ik_walker_counter\'] = 0;
        $output .= \'<nav class="site-navigation" role="navigation">\'.
            \'<ul>\';
    }

    function end_lvl(&$output, $depth) {
        $output .= \'</ul>\'.
            \'<button id="menu" class="menu-button" type="button" role="button" aria-label="Menu Toggle">\'.
            \'<span class="icon-menu"></span>\'.
            \'</button>\'.
            \'</div>\';
    }

    function start_el(&$output, $item, $depth, $args) {
        global $wp_query;
        global $ik_walker_counter;
        $indent = ( $depth ) ? str_repeat( "\\t", $depth ) : \'\';
        $class_names = $value = \'\';
        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
        $class_names = join( \' \', apply_filters( \'nav_menu_css_class\', array_filter( $classes ), $item ) );
        $class_names = \' class="\' . esc_attr( $class_names ) . \'"\';
        $output .= $indent . \'<li id="menu-item-\'. $item->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        ) .\'"\' : \'\';
        $attributes .= \' class="c\'.(++$ik_walker_counter).\'"\';
        $item_output = $args->before;
        $item_output .= \'<a\'. $attributes .\'>\';
        $item_output .= $args->link_before . apply_filters( \'the_title\', $item->title, $item->ID ) . $args->link_after;
        if(strlen($item->description)>2){ $item_output .= \'<br /><span class="sub">\' . $item->description . \'</span>\'; }
        $item_output .= \'</a>\';
        $item_output .= \'<span class="\'.$args->my_individual_class.\'"></span>\';
        $item_output .= $args->after;
        $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
    }

}
您的c1 通过cn 类别由全球$ik_walker_counter 变量,每次启动新级别时都会重置该变量。单个类在walker arguments (例如。,\'my_individual_class\' => \'paw-icon\'.

结束

相关推荐

如果子对象处于活动状态,则在CustomWalker中将类添加到父对象

我正在为wordpress主导航区编写customWalker。但是我有点被困在如何找到一个类并将其添加到孩子的家长的活动中。比如说我让整个customwalker工作得很好,所有家长在活动时都分配了一个活动类,但是当子类活动时,我如何将活动类分配给家长?当当前的\\u page\\u项目如下所示时,我成功地将一个活动类分配到了最顶层:if($depth === 0){ $class_names = str_replace(\'current_page_item\', \'