Wordpress菜单突出显示

时间:2013-01-07 17:30:54

标签: php wordpress-plugin wordpress

我是Wordpress的新手。我的版本是WP 3.4.2 该网站在我的本地主机上,抱歉我无法分享。

如何根据当前帖子动态突出显示导航菜单项?这个问题在Stack Overflow上出现了很多,但我还没有找到任何可接受的答案。我在这里看到的一些答案使用Javascript,但我不能,因为20%的访问者都没有js。

我找到了一个解决方案,使用过滤钩(对我来说是一个新概念)。 我在header.php。

中添加了下面的filter_hook

此挂钩会触发正确的帖子,但最终结果是错误的。而不是添加一个类名" current-menu-item"在我的菜单中的1个项目,我的整个菜单只是字符串:" current-menu-item&#34 ;;

有谁能帮助我理解我做错了什么?

if(($post->post_type) =="communities")
    add_filter('wp_nav_menu' , 'special_nav_class' , 10 , 2);

function special_nav_class( $item){

     if(true){
             $class = "current-menu-item";
     }
     return $class;
}

2 个答案:

答案 0 :(得分:6)

如果你使用WordPress embedded menu functionality(你肯定应该),WordPress会自动将current-menu-item类添加到当前项目,current-menu-parent添加到主LI,如果当前项目item位于下拉菜单中。

然后,您所要做的就是将CSS规则应用于这些类。

答案 1 :(得分:1)

我想首先查看相关过滤器的源代码,如果是'wp_nav_menu',则是WordPress Trac上nav-menu-template.php的第237行。

查看代码我发现过滤器可以更改$ nav_menu变量。所以无论你从这个过滤器返回什么,都将成为html。如果要更改CSS类,可能需要使用“nav_menu_css_class”过滤器。通过此过滤器,您可以查看已分配的类并以其覆盖它们,只需使用您指定的类,或添加您的类。

if ( $post->post_type == "communities" ) {
    add_filter( 'nav_menu_css_class', 'special_nav_class', 10 , 3 );
}

function special_nav_class( $classes, $item, $args ){
    if ( true ) {
        $classes[] = "current-menu-item";
    }
    return $classes;
}

我认为您可能想要更多地玩这个,但是将if语句移动到special_nav_class函数中。我认为post_type可以从您从过滤器收到的$ item变量中确定。但我不是百分之百。