有没有一种好方法可以使用wp\\u nav\\u菜单将一类“parent”添加到具有子级的项目列表中?
我在网上找到了一些解决方案,但似乎没有达到预期效果。
有没有一种好方法可以使用wp\\u nav\\u菜单将一类“parent”添加到具有子级的项目列表中?
我在网上找到了一些解决方案,但似乎没有达到预期效果。
这可能不是理想的解决方案,这取决于您需要该类的用途,但您可以通过JavaScript添加“父”类。下面的行使用jQuery:has()
选择器:
$(\'#nav-id\').find(\'li:has(ul)\').addClass(\'parent\');
参见Wordpress codexhttp://codex.wordpress.org/Function_Reference/wp_nav_menu#How_to_add_a_parent_class_for_menu_item
使用此功能:
add_filter(\'wp_nav_menu_objects\', function ($items) {
$hasSub = function ($menu_item_id, &$items) {
foreach ($items as $item) {
if ($item->menu_item_parent && $item->menu_item_parent==$menu_item_id) {
return true;
}
}
return false;
};
foreach ($items as &$item) {
if ($hasSub($item->ID, &$items)) {
$item->classes[] = \'menu-parent-item\'; // all elements of field "classes" of a menu item get join together and render to class attribute of
element in HTML
}
}
return $items;
});
您可以使用一点正则表达式和一个自定义菜单遍历器来实现这一点,尽管我尚未对此进行彻底测试:
class My_Walker_Nav_Menu extends Walker_Nav_Menu {
function start_lvl(&$output, $depth) {
$indent = str_repeat("\\t", $depth);
$output = preg_replace( "/(.*)(\\<li.*?class\\=\\")([^\\"]*)(\\".*?)$/", "$1$2$3 has-submenu$4", $output );
$output .= "\\n$indent<ul class=\\"sub-menu\\">\\n";
}
}
每次我们在菜单中开始一个新的级别时,我们都会看到最后一个打开<li>
并将“has submenu”添加到class属性中。不幸的是,在生成列表项时,我们不知道它是否有子项。要使用上述方法,只需传入walker参数,在其中声明菜单,例如:
wp_nav_menu( array( \'theme_location\' => \'header\', \'walker\' => new My_Walker_Nav_Menu() ) );
我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph