问题描述
有没有办法将由 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。