我是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;
}
答案 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变量中确定。但我不是百分之百。