我知道这个问题被问了很多次,但我没有找到一个真正好的解决方案:
我有一个自定义的帖子类型“事件”,其中包含一些类别,如“演讲”。对于每个类别,我创建了一个单独的页面,其中显示类别信息和该类别中的事件列表。这些页面都可以从子菜单入口访问。
如果打开事件,则没有菜单项突出显示为当前菜单项。我认为最好的解决方案是将每个类别“链接”到它的页面,但我不知道如何做到这一点。
将适当的类添加到菜单项和它们的父菜单项中会很好,但修改导航菜单行者会很完美(另一个插件需要知道哪个是当前菜单项,以便在第二个导航栏中显示当前子菜单)。
我当前的解决方案是以下过滤器:
function my_special_nav_class( $classes, $item ) {
global $post;
if (get_post_type() == "event") {
$page_categories = wp_get_post_terms($post->ID, \'event-categories\');
if ($page_categories) {
foreach( $page_categories as $category ) {
$ignored_terms = array(\'CRM\', \'PPM\');
$cat_name = $category->name;
if ( !in_array($cat_name, $ignored_terms) ) {
if ($cat_name == $item->title) {
$classes[] = \'current-menu-item\';
}
}
}
}
}
return $classes;
}
add_filter( \'nav_menu_css_class\', \'my_special_nav_class\', 10, 2 );
但如何将类添加到当前类的父菜单项中?
最合适的回答,由SO网友:nimmolo 整理而成
我想我有一个功能可以为你做这件事。
突出显示菜单项的常用方法是将类“current menu item”添加到该项,然后可以使用CSS设置突出显示链接的样式。
在这种情况下,要突出显示taxonomy menu link 如果我们在发表分类法的文章,对吗?例如,如果我们在“CategoryX”中的帖子中,我们希望突出显示“CategoryX”的菜单链接。
以下Walker\\u Nav\\u菜单的过滤器应该会有所帮助。这可以在函数中进行。php
function my_special_nav_class( $classes, $item ) {
if( \'category\' == $item->object ){
$current_category = array();
$category = get_category( $item->object_id );
$category = $category->term_id;
global $wp_query, $wp_rewrite;
$queried_object = $wp_query->get_queried_object();
$current_category[] = $queried_object->term_id;
// uncomment the following if you want to debug:
// echo \'<pre>Category of this menu item<br />\';
// print_r($category);
// echo \'</pre>\';
// echo \'<pre>Category queried for this page<br />\';
// print_r($current_category);
// echo \'</pre>\';
if( in_array( $category, $current_category ) ) {
$classes[] = \'current-menu-item\';
}
}
return $classes;
}
add_filter( \'nav_menu_css_class\', \'my_special_nav_class\', 10, 2 );
此函数筛选
nav_menu_css_class
所使用的
Walker_Nav_Menu
.
https://core.trac.wordpress.org/browser/tags/4.1/src/wp-includes/nav-menu-template.php#L427
上面的过滤器适用于默认的分类法“category”,但我们可能必须遍历所有当前的post分类法才能捕获自定义分类法。如果您只需要一种分类法,那么它会更简单。我还在为自定义分类法制定解决方案。。。