很多人,无论是在SOW还是其他地方,都有我同样的问题。
我已经在我的网站上安装了BBpress插件。这个插件在网站上启用论坛。
我已经纠结了好几天了(没有用)在这个记录在案的问题上,当选择任何论坛子菜单项时,插件会导致错误的菜单项被突出显示。相反,Blog菜单项会默认高亮显示。
查看:点击论坛,这个结果页面突出显示了"论坛"菜单项。但是点击"测试论坛"(或向下钻到任何其他论坛项目),结果页面总是突出显示"博客"。
这是我目前所知道的:
- 单靠CSS是无法解决的。
- 我正在使用永久链接(选择"Post name")
- PHP根据您导航到的页面为菜单项分配
.current-menu-item
和/或.current_page_item
类(以及相应的-ancestor
和-parent
类)。由于某些原因,它无法将任何论坛子菜单视为当前页面。因此,它默认为"Blog"作为当前页面项。 - 所以我知道我需要做以下事情:
- 让Wordpress在每个页面加载时检查URL
- 如果
"/forums/"
是URL的一部分,删除所有.current-menu*
和.current_page*
类(通配符是清除祖先/父类所必需的)。 - 然后将
.current-menu-item
和.current_page_item
类分配给"Forum"
菜单项。
问题是,虽然我认为我已经接近了,但我不知道该怎么做。
我试过很多方法。
我找到了这个Jquery解决方案,但不知道如何实现它,我也不相信这种方法:
// First add a “forum-class” to your forums menu item in your custom menu
// Then add this to your js file with YOURURL = the url of your site and forums = your forums slug :
$(function() {
var forumURL = window.location.href.indexOf("YOURURL/forums/");
if(forumURL > -1){
$('li.forum-class').addClass('current-menu-item');
}
});
然后,我发现这种方法似乎更接近我想要的,但是它引入了一个新类,并且似乎没有从Blog菜单中清除不正确的类。另外,我不知道把这些代码放在哪里,或者在哪里创建js文件。
if (strtolower($thats_all->post_title) == "forum" || strtolower($thats_all->post_title) == "forums") {
$addclass = ' class="current_page"';
} else {
$addclass = '';
}
最后,我发现这是什么我认为我需要,但我有困难实现它(我试过把它粘在我的menu-primary.php
和header.php
,但没有去)。
// this forces the class current-menu-item to a menu item which I named 'forums'
add_filter('nav_menu_css_class', 'remove_link_parent_menu_classes', 420 ,3);
function remove_link_parent_menu_classes($classes, $item, $args){
if(strpos($item->url, '/forums/') !== true)
return array_diff($classes, array('current_page_item', 'current-menu-item'));
return $classes;
}
我想我接近了。很接近。只需要朝正确的方向推一把。我需要知道:
- 后一种解决方案是否有效?
- 哪个文件,以及文件中的确切位置,我需要放置代码吗?
谢谢!
我终于破解了!根据上面的线索,我找到了适合我的代码。
add_filter( 'nav_menu_css_class', 'namespace_menu_classes', 10, 2 );
function namespace_menu_classes( $classes , $item ){
if ( get_post_type() == 'forum' ) {
$classes = str_replace( 'current_page_parent', '', $classes );
$classes = str_replace( 'menu-item-16', 'current_page_parent', $classes );
}
return $classes;
}
在function.php
文件的末尾复制上述内容。
然后将'forum'
更改为您选择的slug名称,并将'menu-item-16'
替换为您想要突出显示的正确编号的菜单项(您需要使用web浏览器的开发人员工具来检查您的站点以能够找到此)。
我花了一个星期才弄明白(并且需要学习php)!祝你好运,希望这篇文章能帮助到其他所有人。