我找到了向顶级iTen添加类的示例,这样我们就可以在菜单iTen中显示带有子项的箭头,但处理已经内置的WordPress类似乎很糟糕,不能用current和css悬停显示箭头,这只会破坏所有状态。
有没有办法添加<span class="arrow"></span>
在父级内li
相反
非常感谢!
我找到了向顶级iTen添加类的示例,这样我们就可以在菜单iTen中显示带有子项的箭头,但处理已经内置的WordPress类似乎很糟糕,不能用current和css悬停显示箭头,这只会破坏所有状态。
有没有办法添加<span class="arrow"></span>
在父级内li
相反
非常感谢!
您可以使用walker_nav_menu_start_el
过滤器:
add_filter( \'walker_nav_menu_start_el\', \'wpse_add_arrow\',10,4);
function wpse_add_arrow( $item_output, $item, $depth, $args ){
//Only add class to \'top level\' items on the \'primary\' menu.
if(\'primary\' == $args->theme_location && $depth ==0){
$item_output .=\'<span class="arrow"></span>\';
}
return $item_output;
}
这假设您正在使用wp_nav_menu( array( \'theme_location\' => \'primary\') );
显示菜单。更新了回复意见的答案。添加span
仅将类设置为具有子元素的顶级元素,您需要使用自定义walker:
class SH_Arrow_Walker_Nav_Menu extends Walker_Nav_Menu {
function start_lvl(&$output, $depth, $args) {
$indent = str_repeat("\\t", $depth);
if(\'primary\' == $args->theme_location && $depth ==0){
$output .=\'<span class="arrow"></span>\';
}
$output .= "\\n$indent<ul class=\\"sub-menu\\">\\n";
}
}
要使用此选项,您需要设置walker
中的参数wp_nav_menu
:wp_nav_menu( array(
\'theme_location\' => \'primary\',
\'walker\'=> new SH_Arrow_Walker_Nav_Menu()
) );
要扩展上一个答案,这里是如何在不使用Walker类的情况下检测某个项是否是父菜单项
add_filter( \'walker_nav_menu_start_el\', \'cfw_add_arrow\',10,4);
function cfw_add_arrow( $output, $item, $depth, $args ){
//Only add class to \'top level\' items on the \'primary\' menu.
if(\'primary\' == $args->theme_location && $depth === 0 ){
if (in_array("menu-item-has-children", $item->classes)) {
$output .=\'<span class="arrow">arrow</span>\';
}
}
return $output;
}
如果这个PHPin_array
检查在某些情况下可能会失败,到目前为止,我还没有遇到任何问题。我正在使用我自己的主题,我已经阅读了这些参考资料。对于注释,我使用注释。php模板位于我的主题文件夹中,但注释中没有代码。php创建导航链接,实际上是在标题和主要内容之间。