为wordpress菜单添加顺序编号(仅深度0)

时间:2015-02-20 10:32:27

标签: php wordpress menu nav

我正在尝试在wordpress的菜单中的每个链接后添加顺序编号。它们应该是标签和文本。所以我可以风格。

尝试下面的这个,但由于它的CSS,我无法设置这些数字。

How to add sequential numbering for wordpress menu

我对JS一无所知。所以我在navwalker.php

中这样做了
            if(! empty( $item->attr_title )){
            $item_output .= '<a'. $attributes .'><i class="' . esc_attr( $item->attr_title ) . '"></i>&nbsp;';
        } else {
            $item_output .= '<a'. $attributes .'>';
        }

        $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
        $item_output .= ($args->has_children && $depth == 0) ? ' <span class="caret"></span></a>' : '</a>';
        $item_output .= $args->after . '<span class="navnum">' . str_pad(esc_attr( $item->menu_order ), 2, "0", STR_PAD_LEFT) . '.</span>';

        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
}

它有效。 唯一的问题是它会计算可折叠菜单中的子项(子菜单),因此它会创建如下内容:

01
03
04
07
08

关于如何只为父母编号的任何想法?

(如果解决方案是JS,我会很感激,如果你解释它很简单)

1 个答案:

答案 0 :(得分:0)

如果你要做的只是给顶级菜单编号,你可以只测试深度。

变化:

    $item_output .= $args->after . '<span class="navnum">' . str_pad(esc_attr( $item->menu_order ), 2, "0", STR_PAD_LEFT) . '.</span>';

到:

    $item_output .= $args->after . ($depth == 0 ? '<span class="navnum">' . str_pad(esc_attr( $item->menu_order ), 2, "0", STR_PAD_LEFT) : '') . '.</span>';

要按顺序编号菜单项,请在新级别开始时设置自己的全局计数器:

public function start_lvl( &$output, $depth = 0, $args = array() ) {
    if (!isset($_GLOBALS['menu_counter'])) {
        $GLOBALS['menu_counter'] = array();
    }
    $GLOBALS['menu_counter'][$depth] = 0;
    $indent = str_repeat("\t", $depth);
    $output .= "\n$indent<ul class=\"sub-menu\">\n";
}

然后在start_el中:

public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    global $menu_counter;
    ....

以及您在问题中提供的代码示例:

$item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
$item_output .= ($args->has_children && $depth == 0) ? ' <span class="caret"></span></a>' : '</a>';
$item_output .= $args->after . '<span class="navnum">' . str_pad(++$menu_order[$depth], 2, "0", STR_PAD_LEFT) . '.</span>';

当你设置一个新的等级时,这样做是设置一个变量,从零开始。然后,对于该级别的每个项目,它会向该变量添加一个项目,并将结果用作菜单项目的编号。