ID of parent Menu

时间:2012-01-17 作者:Jay

我试图为wordpress使用wp\\u nav\\u菜单功能生成的每个子菜单分配不同的ID。实际上,wordpress为生成的每个子菜单分配相同的类(子菜单)。

<ul class="sub-menu"></ul>
我想让它生成如下内容:

<ul class="sub-menu" id="xx"></ul>
为了修改输出,我在主题函数文件中有一个自定义的walker,但我不知道如何获取父菜单项的ID并将其分配给UL输出。

感谢您的帮助!

编辑Walker的以下内容:

/**Custom walker**/
class description_walker extends Walker {
var $tree_type = array( \'post_type\', \'taxonomy\', \'custom\' );
var $db_fields = array( \'parent\' => \'menu_item_parent\', \'id\' => \'db_id\' );
function start_lvl(&$output, $depth) {
    $indent = str_repeat("\\t", $depth);
    $output .= "\\n$indent<ul class=\\"sub-menu\\" id=\\"wut\\">\\n";
}
function end_lvl(&$output, $depth) {
    $indent = str_repeat("\\t", $depth);
    $output .= "$indent</ul>\\n";
}
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, $args ) );
    $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 );
}

function end_el(&$output, $item, $depth) {
    $output .= "</li>\\n";
}
}

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

最终使用以下内容

 <script>
$(function(){
    var i =0;
 $(\'ul.sub-menu\').addClass (function(idx) {

     return "item-" + idx;
 });
 });
 </script>
它将一类item-0、item-1等添加到找到的每个子菜单中。

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph