wp_nav_menu改变子菜单的类名?

有没有办法将由WordPress自己生成的子<ul class="sub-menu">更改为自定义类名?

我知道父母你可以删除或更改'menu_class' => 'newname'

我找不到…试过'submenu_class' => 'customname' :D似乎对我来说是逻辑,但显然这是不正确的..

有任何想法吗?

对此没有select,但是可以扩展Wordpress用来创build菜单HTML的“walker”对象。 只有一种方法需要被覆盖:

 class My_Walker_Nav_Menu extends Walker_Nav_Menu { function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<ul class=\"my-sub-menu\">\n"; } } 

那么你只需要将walker的一个实例作为parameter passing给wp_nav_menu就像这样:

 'walker' => new My_Walker_Nav_Menu() 

replace类:

 echo str_replace('sub-menu', 'menu menu_sub', wp_nav_menu( array( 'echo' => false, 'theme_location' => 'sidebar-menu', 'items_wrap' => '<ul class="menu menu_sidebar">%3$s</ul>' ) ) ); 

以下是理查德所做的更新,增加了一个“深度”指标。 输出为0级,1级,2级等。

 class UL_Class_Walker extends Walker_Nav_Menu { function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<ul class=\"level-".$depth."\">\n"; } } 

你可以使用WordPress的preg_replacefilter(在你的主题functions.php文件)例如:

 function new_submenu_class($menu) { $menu = preg_replace('/ class="sub-menu"/','/ class="yourclass" /',$menu); return $menu; } add_filter('wp_nav_menu','new_submenu_class'); 

就像往常一样,在写了一些东西到网站上找了很久之后,在我发布这里之后的一分钟,我发现了我的解决scheme。

它以为我会在这里分享,所以别人可以find它。

 //Add "parent" class to pages with subpages, change submenu class name, add depth class class Prio_Walker extends Walker_Nav_Menu { function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ){ $GLOBALS['dd_children'] = ( isset($children_elements[$element->ID]) )? 1:0; $GLOBALS['dd_depth'] = (int) $depth; parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output ); } function start_lvl(&$output, $depth) { $indent = str_repeat("\t", $depth); $output .= "\n$indent<ul class=\"children level-".$depth."\">\n"; } } add_filter('nav_menu_css_class','add_parent_css',10,2); function add_parent_css($classes, $item){ global $dd_depth, $dd_children; $classes[] = 'depth'.$dd_depth; if($dd_children) $classes[] = 'parent'; return $classes; } //Add class to parent pages to show they have subpages (only for automatic wp_nav_menu) function add_parent_class( $css_class, $page, $depth, $args ) { if ( ! empty( $args['has_children'] ) ) $css_class[] = 'parent'; return $css_class; } add_filter( 'page_css_class', 'add_parent_class', 10, 4 ); 

这是我find解决scheme的地方: 在WordPress的支持论坛的解决scheme

这是一个古老的问题,我不知道我提到的解决scheme是否可以在您提问的时候提供,但我认为这是值得一提的。 您可以通过向nav_menu_submenu_css_class添加filter来实现您想要的nav_menu_submenu_css_class 。 看下面的例子 – 你可以用你想要的类来replacemy-new-submenu-class

 function my_nav_menu_submenu_css_class( $classes ) { $classes[] = 'my-new-submenu-class'; return $classes; } add_filter( 'nav_menu_submenu_css_class', 'my_nav_menu_submenu_css_class' ); 

我不得不改变:

function start_lvl(&$output, $depth)

至:

function start_lvl( &$output, $depth = 0, $args = array() )

因为我遇到了一个不兼容的错误:

Strict Standards: Declaration of My_Walker_Nav_Menu::start_lvl() should be compatible with Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array)

这可能对你有用

如何添加菜单项的父类

 function wpdocs_add_menu_parent_class( $items ) { $parents = array(); // Collect menu items with parents. foreach ( $items as $item ) { if ( $item->menu_item_parent && $item->menu_item_parent > 0 ) { $parents[] = $item->menu_item_parent; } } // Add class. foreach ( $items as $item ) { if ( in_array( $item->ID, $parents ) ) { $item->classes[] = 'menu-parent-item'; } } return $items; } add_filter( 'wp_nav_menu_objects', 'wpdocs_add_menu_parent_class' ); /** * Add a parent CSS class for nav menu items. * @param array $items The menu items, sorted by each menu item's menu order. * @return array (maybe) modified parent CSS class. */ 

将条件类添加到菜单项

 function wpdocs_special_nav_class( $classes, $item ) { if ( is_single() && 'Blog' == $item->title ) { // Notice you can change the conditional from is_single() and $item->title $classes[] = "special-class"; } return $classes; } add_filter( 'nav_menu_css_class' , 'wpdocs_special_nav_class' , 10, 2 ); 

供参考: 点击我

在上面我需要一个小的改变,我想要放置,但我不能做到这一点,你的输出将是这样的

 <ul> <li id="menu-item-13" class="depth0 parent"><a href="#">About Us</a> <ul class="children level-0"> <li id="menu-item-17" class="depth1"><a href="#">Sample Page</a></li> <li id="menu-item-16" class="depth1"><a href="#">About Us</a></li> </ul> </li> </ul> 

我在找什么

 <ul> <li id="menu-item-13" class="depth0"><a class="parent" href="#">About Us</a> <ul class="children level-0"> <li id="menu-item-17" class="depth1"><a href="#">Sample Page</a></li> <li id="menu-item-16" class="depth1"><a href="#">About Us</a></li> </ul> </li> </ul> 

在上面的一个我已经把父类放在父锚链接里<li id="menu-item-13" class="depth0"><a class="parent" href="#">About Us</a>

我build议将您的cutomclass CSS类名称replace为子菜单。 使用查找和replace:即。 find:.customclassreplace.sub菜单,为我工作。

要更改默认的“子菜单”类名,有一个简单的方法。 你可以在wordpress文件中改变它。

位置:www / project_name / wp-includes / nav-menu-template.php。

打开这个文件,在第49行,用你的自定义类更改子菜单类的名字。

或者,您也可以在子菜单旁边添加自定义类。

完成。

它为我工作。我用wordpress-4.4.1。