当子菜单项不在菜单中时突出显示父菜单项

时间:2012-05-15 作者:janw

当子页面本身不在菜单中时,我想在菜单中突出显示子页面的父页面。

我知道如果您将子页面添加为子页面,这将起作用,但事实并非如此。

有什么想法吗?

3 个回复
最合适的回答,由SO网友:janw 整理而成

Alrdy got it:

<?php //in functions.php
add_filter(\'nav_menu_css_class\', \'highlight_portfolio\', 12, 2);
function highlight_portfolio($classes, $item) {
    $parent = get_post_ancestors();
    $parent_ID = $parent[0];

    if ($parent_ID == $item->object_id) {
        array_push($classes, \'current-menu-ancestor\');
    }
    return $classes;
}
SO网友:jckstl

janw给出的公认答案非常接近,但是get_post_anscestors() 根据WordPress文档,实际上需要一个WP Post或其ID作为参数:

https://developer.wordpress.org/reference/functions/get_post_ancestors/

我这样实施,效果很好:

function highlight_portfolio($classes, $item) {
    $parent = get_post_ancestors($item);
    $parent_ID = $parent[0];

    if ($parent_ID == $item->object_id) {
        array_push($classes, \'current-menu-ancestor\');
    }
    return $classes;
}
add_filter(\'nav_menu_css_class\', \'highlight_portfolio\', 12, 2);
我只想把这作为一个评论,但还没有声誉,所以把它作为一个答案。

SO网友:Bibiano Wenceslao

作为@janw答案的替代方法,您可以在主题的页脚中插入以下代码。php文件位于结束正文标记之前。

<!-- Highlight parent page link when on child page -->
<?php if (is_page()) {   //  displaying a child page ?>
    <script type="text/javascript">
        jQuery("li.current-page-ancestor").addClass(\'current-menu-item\');
    </script>
<?php } ?>
我在这里的帖子中详细介绍了此代码的工作原理:How to keep parent page navigation link highlighted when viewing a child/sub page!

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph