问题描述

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

我知道父母可以使用'menu_class' => 'newname'删除或更改名称

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

有任何想法吗?

最佳解决方案

没有此选项,但您可以扩展 WordPress 用于创建菜单 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";
  }
}

那么你只是将你的步行者的一个实例作为参数传递给 wp_nav_menu,就像这样:

'walker' => new My_Walker_Nav_Menu()

次佳解决方案

替换类:

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

第三种解决方案

这是 Richard 做了什么的更新,增加了一个”depth” 指标。输出为 0,level-1,level-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_replace 过滤器 (在您的主题 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'); 

第五种方案

像它一直是,在写了一些东西到网站之后找了好长时间,就在我贴在这里之后的一分钟,我找到了我的解决方案。

它以为我会在这里分享,以便其他人能找到它。

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

这是我找到解决方案的地方:Solution in WordPress support forum

第六种方案

我不得不改变:

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)

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。