我正在使用自定义Walker function来自定义Wordpress中菜单的显示。获取wp_nav_menu元素的兄弟的数量
为了向前迈进一步,我想为超过X个元素的子菜单使用不同的HTML标记。
有没有一种方法可以检查给定项目的元素数量start_el
函数中的沃克Walker_Nav_Menu
?
我正在使用自定义Walker function来自定义Wordpress中菜单的显示。获取wp_nav_menu元素的兄弟的数量
为了向前迈进一步,我想为超过X个元素的子菜单使用不同的HTML标记。
有没有一种方法可以检查给定项目的元素数量start_el
函数中的沃克Walker_Nav_Menu
?
它不使用沃克类最简单的事情,所以我想到了一个解决方案的使用DOMDocument解析菜单HTML和菜单已建成之后算子菜单儿童(使用wp_nav_menu_{$menu->slug}_items
过滤器):
add_filter('wp_nav_menu_{MENU_SLUG}_items', function($items, $args) {
$dom = new DOMDocument();
$dom->loadHTML($items);
// get the .sub-menu elements
$submenus = $dom->getElementsByTagName('ul');
// for each one if it has children add a class
// like has-{num}-children
foreach ($submenus as $ul) {
if($ul->hasChildNodes()) {
// number of child nodes divided by 2
// to exclude the text nodes
$numChildren = $ul->childNodes->length/2;
$class = "has-$numChildren-children";
$ul->setAttribute(
'class', $ul->getAttribute('class') . ' ' . $class
);
}
}
// save the changes
$html = $dom->saveHtml($dom->documentElement);
// remove html and body tags added by $dom->loadHTML
$items = preg_replace('~</?(html|body)>~', '', $html);
return $items;
}, 10, 2);
这应该添加一个类has-{num}-children
与每个子菜单与儿童(其中{num}
是儿童的人数),以便您可以针对任何你想要的。
它可以很容易地更改为仅适用于具有最少子女人数的子菜单。
记得用你的菜单slu change更改{MENU_SLUG}
。
我认为你将不得不这样做与jQuery – mdarmanin