如何在包括父级的菜单中设置当前活动的页面

时间:2018-04-11 作者:Simon Brodtmann

我有以下问题:

有一个自定义的帖子类型。有几个页面,每个页面根据一些帖子标准列出了一些帖子(自定义WP\\U查询)。

当我单击链接打开完整版本的帖子时,帖子的父页面是。但为了用户体验,它应该是用户来自的父页面,并且应该在菜单中突出显示。

我通过将“”parent=“添加到链接并在筛选器中解析,部分解决了此问题:

// Fix menu parents
add_filter(\'nav_menu_css_class\', function($classes, $item, $args) {
    if (!isset($_GET[\'parent\']) || empty($_GET[\'parent\'])) return $classes;
    if ($item->object_id == $_GET[\'parent\']) {
        $classes[] = "current_page_item";
        $classes[] = "current-menu-item";
    }
    return $classes;
}, 10, 3);
现在出现了这样的情况:当父菜单位于子菜单内时,该子菜单的父菜单不会标记为活动,子菜单保持关闭状态。所以我需要补充current-page-ancestor current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor 到该筛选函数内的父菜单项。

所以我想的是,我需要$item->has_child($_GET[\'parent\']) 这显然不存在。

你们有什么想法吗?

编辑:我添加了一个脏客户端JavaScript补丁来解决这个问题。但我还是更喜欢服务器端修复。

jQuery(function() {
    jQuery(".current-menu-item").parents("li").addClass("current-page-ancestor current-menu-ancestor current-menu-parent current_page_parent current_page_ancestor");
});

1 个回复
SO网友:zoltar

听起来你可能把事情复杂化了。如果您的目标是突出显示一篇文章的顶部父级,而该文章列在该父级的子菜单中,那么这是一个CSS问题,而不是wordpress问题。以下应起作用:

.current-menu-parent a, .current-menu-ancestor a {
 color: #7dca8d;
}

结束