自定义菜单查看器:如何检查第一项

时间:2013-09-05 作者:Supertramp

我只需要为子菜单的第一项输出不同的html代码。如果当前项是否为第一项,如何签入start\\u el()函数?

示例:

Menu voice 1
-- Sub 1
-- Sub 2
-- Sub 3
Menu voice 2
Menu voice 3
Menu voice 4
我会知道我什么时候在Sub1

UPDATE - I\'ve solved using Static Var:

class my_walker_nav_menu extends Walker_Nav_Menu {
    static $count=0;
    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 .\'>\';

        if ($depth==0) self::$count=0;  // reset var when we are in first level


        if ($depth==1 && self::$count==1) {  // if we are in submenu and items count is 1...

            //your custom code              

        }

        $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 );

        self::$count++;  // increase counter
    }


}

1 个回复
SO网友:jim.duck

计算方法中静态变量中的0级元素,如果达到第三级,则添加额外的类。示例代码:

function start_lvl(&$output, $depth) {
    static $column = 1;
    $indent = str_repeat("\\t", $depth);
    if ($depth > 0)
    {
        $output .= "\\n$indent<ul class=\'subsubmenu\'>\\n";
    }
    else
    {
        $column += 1;
        $extra = 3 === $column ? \' third-column\' : \'\';
        $output .= "\\n$indent<ul class=\'submenu$extra\'>\\n";
    }
}

结束

相关推荐

WP_LIST_PAGES-使用Walker定制输出顺序

我正在使用wp\\u list\\u页面创建导航菜单。不过,我在菜单顺序方面遇到了一个挑战,我正试图找到一种方法来更好地控制菜单的顺序。是否可以使用Walker自定义wp\\U list\\u页面输出的顺序?例如,我想检查wp\\u list\\u pages results中的给定页面是否有post_meta 的值page_x 然后对另一个页面执行相同的操作,如果没有规则匹配,则继续正常操作。