我使用此代码段在自定义贴子类型的单页上标记父导航处于活动状态:
add_action(\'nav_menu_css_class\', \'add_current_nav_class\', 10, 2 );
function add_current_nav_class($classes, $item) {
// Getting the current post details
global $post;
// Getting the post type of the current post
$current_post_type = get_post_type_object(get_post_type($post->ID));
$current_post_type_slug = $current_post_type->rewrite[slug];
// Getting the URL of the menu item
$menu_slug = strtolower(trim($item->url));
// If the menu item URL contains the current post types slug add the current-menu-item class
if (strpos($menu_slug,$current_post_type_slug) !== false) {
$classes[] = \'current-menu-item\';
}
// Return the corrected set of classes to be added to the menu item
return $classes;
}
但当你在一页内多走一步时,它不会标记该页。
For example: 当我在home/photo
, 活动链接标记为.current-menu-item
没有问题。但是,当我在里面的时候home/photo/this-photo
, 活动链接类消失。
Here\'s is my site. 若要复制该行为,请单击其中一个缩略图,从该帖子类型转到单个页面,并查看左侧的摄影链接停用。
这也可以在内部复制blog page. 这是一个带有自定义循环的自定义模板,用于获取所有帖子(不是自定义帖子)。
这是我的代码:
add_action(\'nav_menu_css_class\', \'add_current_nav_class\', 10, 2 );
function add_current_nav_class($classes, $item) {
// Getting the current post details
global $post;
// Getting the post type of the current post
$current_post_type = get_post_type_object(get_post_type($post->ID));
$current_post_type_slug = $current_post_type->rewrite[\'slug\'];
// Getting the URL of the menu item
$menu_slug = strtolower(trim($item->url));
// If the menu item URL contains the current post types slug add the current-menu-item class
if (strpos($menu_slug,$current_post_type_slug) !== false) {
$classes[] = \'current-menu-item\';
}
// Return the corrected set of classes to be added to the menu item
return $classes;
}
最合适的回答,由SO网友:websupporter 整理而成
要突出显示菜单元素,应添加类active
. 这将适用于您的照片自定义帖子类型。
关于你的博客帖子:正如你所看到的,在博客帖子的URL中没有post/
这对于代码的执行是必要的。此外,博客概述页面并不等于自定义的post rewrite slug。
您可以使用类似于此语句的内容来添加active
博客帖子类:
if (
\'post\' === get_post_type($post->ID)
&& false !== strpos( $menu_slug, \'blog\' )
) {
$classes[] = \'current-menu-item\';
$classes[] = \'active\';
}