子帖子时突出显示父菜单项

时间:2016-07-29 作者:palekjram

我使用此代码段在自定义贴子类型的单页上标记父导航处于活动状态:

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;

}

1 个回复
最合适的回答,由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\';
}

相关推荐

用标准的干净文件替换NAV-menus.php文件?

我是一个自学成才的wordpress网站设计师,请原谅我的无知。我为一个客户开发的几个网站最近被一个印尼黑客组织破坏了(很有趣!)。客户端没有更新wordpress安装和其他一些危及安全的事情。遗憾的是,没有网站的清理备份。网络主机给了我一个包含恶意软件扫描结果的文本文件。看起来很多受影响的文件都是导航菜单。网站的php文件。文本文件中显示的扫描结果示例如下:“[主目录]/[网站文件夹名称]/wp includes/nav-menu.php:SL-php-INJECTOR-1-ejw.UNOFFICIAL