将“Parent”类添加到父菜单项

时间:2012-01-31 作者:Dean Elliott

有没有一种好方法可以使用wp\\u nav\\u菜单将一类“parent”添加到具有子级的项目列表中?

我在网上找到了一些解决方案,但似乎没有达到预期效果。

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

这可能不是理想的解决方案,这取决于您需要该类的用途,但您可以通过JavaScript添加“父”类。下面的行使用jQuery:has() 选择器:

$(\'#nav-id\').find(\'li:has(ul)\').addClass(\'parent\');

SO网友:Cris

参见Wordpress codexhttp://codex.wordpress.org/Function_Reference/wp_nav_menu#How_to_add_a_parent_class_for_menu_item

使用此功能:

add_filter(\'wp_nav_menu_objects\', function ($items) {
    $hasSub = function ($menu_item_id, &$items) {
        foreach ($items as $item) {
            if ($item->menu_item_parent && $item->menu_item_parent==$menu_item_id) {
                return true;
            }
        }
        return false;
    };

    foreach ($items as &$item) {
        if ($hasSub($item->ID, &$items)) {
            $item->classes[] = \'menu-parent-item\'; // all elements of field "classes" of a menu item get join together and render to class attribute of 
  • element in HTML } } return $items; });
  • SO网友:sanchothefat

    您可以使用一点正则表达式和一个自定义菜单遍历器来实现这一点,尽管我尚未对此进行彻底测试:

    class My_Walker_Nav_Menu extends Walker_Nav_Menu {
        function start_lvl(&$output, $depth) {
            $indent = str_repeat("\\t", $depth);
            $output = preg_replace( "/(.*)(\\<li.*?class\\=\\")([^\\"]*)(\\".*?)$/", "$1$2$3 has-submenu$4", $output );
            $output .= "\\n$indent<ul class=\\"sub-menu\\">\\n";
        }
    }
    
    每次我们在菜单中开始一个新的级别时,我们都会看到最后一个打开<li> 并将“has submenu”添加到class属性中。不幸的是,在生成列表项时,我们不知道它是否有子项。

    要使用上述方法,只需传入walker参数,在其中声明菜单,例如:

    wp_nav_menu( array( \'theme_location\' => \'header\', \'walker\' => new My_Walker_Nav_Menu() ) );
    

    结束

    相关推荐

    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