在顶部带有嵌套斜体的菜单项中添加跨区

时间:2012-06-18 作者:Diana

我找到了向顶级iTen添加类的示例,这样我们就可以在菜单iTen中显示带有子项的箭头,但处理已经内置的WordPress类似乎很糟糕,不能用current和css悬停显示箭头,这只会破坏所有状态。

有没有办法添加<span class="arrow"></span> 在父级内li 相反

非常感谢!

2 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

您可以使用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()
 ) );

SO网友:Hooman Askari

要扩展上一个答案,这里是如何在不使用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 检查在某些情况下可能会失败,到目前为止,我还没有遇到任何问题。

结束

相关推荐

Remove post navigation links

我正在使用我自己的主题,我已经阅读了这些参考资料。对于注释,我使用注释。php模板位于我的主题文件夹中,但注释中没有代码。php创建导航链接,实际上是在标题和主要内容之间。