结构
1、定义类:类名是“Understrap_WP_Bootstrap_Navwalker”,继承自“Walker_Nav_Menu”;
2、
wp_nav_menu构造多级菜单,修改二级菜单的类名,需要通过Walker参数来设置,调用一个类,这个类继承自Walker_ Nav_Menu这个类。(默认调用的是Walker_ Nav_Menu)。如何
<?php
wp_nav_menu( array(
…………
'depth' => 2, //菜单深度,默认0
'walker' => 'WP_Bootstrap_Navwalker' //自定义walker
) );
?>
举例1:
class new_walker extends Walker_Nav_Menu
{
function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= "\n$indent<ul class=\"child-menu\">\n";
}
}
原文:https://developer.wordpress.org/reference/classes/walker_nav_menu/
Core class used to implement an HTML list of nav menu items.
继承自:
Walker:https://developer.wordpress.org/reference/classes/walker/
WordPress 自定义导航菜单
如何Walker_Nav_Menu时判断有子菜单
if ( $args->has_children ) {}
if ( $args->walker->has_children ) {}
不一定哪个起作用,都用:
// Add .dropdown or .active classes where they are needed.
if ( isset( $args->has_children ) && $args->walker->has_children ) {
$classes[] = 'dropDown';
}
四个方法
- end_el — Ends the element output, if needed.
- end_lvl — Ends the list of after the elements are added. 对应 start_lvl 的子菜单列表的结束标签, 默认是
</ul>
, 在最后一个子条目之后生成。 - start_el — Starts the element output. 条目的前半部分, 包括开始符号和评论内容. 开始符号是
<div>
或者<li>
(外层是 ol 或 ul 的情况下是<li>
) - start_lvl — Starts the list before the elements are added. 子菜单列表的开始标签,默认是
<ul>
, 在第一个子条目之前生成。
start_lvl
链接:https://developer.wordpress.org/reference/classes/walker_nav_menu/start_lvl/