結構
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/