在存档页面或单曲上将导航漫游中的某些项目设置为活动

时间:2019-04-16 作者:rudtek

我已经创建了一个事件自定义帖子类型,并在菜单中创建了指向该事件(/事件)存档页面的链接。

我正在使用wp_nav_menu() 调用菜单。

当我打开/事件时,菜单上有current_menu_item 类,我将其样式化以更改颜色。这非常有效。

我想通过将菜单项设置为“活动”来增强这一点,无论何时有人在某个页面上。

我创建了一个页面来显示我过去的事件(/过去的事件)。它由一个名为page-past-events.php. 其思想是当用户打开/past-events 事件链接显示为活动。因为我没有菜单项,所以我想要event 菜单项以具有活动类。理想情况下,当用户也参与任何单个事件(事件/事件-12)时,此项目将处于活动状态。

我当前的代码是

  wp_nav_menu(array(
       \'theme_location\' => \'headerMenu\',
  ));
我为我的函数找到了此代码。php:

function my_special_nav_class( $classes, $item ) {
    if ( is_page(\'past-events\') ) {
        $classes[] = \'current-menu-item\';
    }

    return $classes;
}
add_filter( \'nav_menu_css_class\', \'my_special_nav_class\', 10, 2 );
但它不针对我的事件菜单项。

我可以用这样的脚本来完成:

<?php if (is_page(\'past-events\')) { ?>
    <script type="text/javascript">
        var d = document.getElementById("menu-item-15");
        d.className += " current-menu-item";
    </script>
<?php } ?>
但我希望有一种“WordPress”的方式。

EDIT

/events wp菜单中链接到事件存档的自定义链接。

事件的slug是events

/past-events 是具有自己模板的单个页面page-past-events.php

因此,如果有人在“过去的事件”页面上,/events的菜单项将获得活动类,并且出于所有意图和目的,将突出显示为活动。

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

如果我理解得当,这将满足您的要求:

function my_special_nav_class( $classes, $item ) {
    if (
        // 1. The menu item is for the "/events" page. Be sure to change the "123"
        //    (i.e. the "/events" page ID).
        ( \'page\' === $item->object && 123 == $item->object_id ) &&
        // 2. The current page is "Past Events" or that it\'s a "Event" single page.
        //    If "event" isn\'t the correct post type, change it.
        ( is_page( \'past-events\' ) || is_singular( \'event\' ) )
    ) {
        $classes[] = \'current-menu-item\';
    }

    return $classes;
}
add_filter( \'nav_menu_css_class\', \'my_special_nav_class\', 10, 2 );

更新,因此如果/events 菜单项是custom link:

function my_special_nav_class( $classes, $item ) {
    if (
        ( \'custom\' === $item->type && \'events\' === $item->post_name ) &&
        ( is_page( \'past-events\' ) || is_singular( \'event\' ) )
    ) {
        $classes[] = \'current-menu-item\';
    }

    return $classes;
}
add_filter( \'nav_menu_css_class\', \'my_special_nav_class\', 10, 2 );
如果不起作用,请尝试检查菜单项ID(如下所示456):

function my_special_nav_class( $classes, $item ) {
    if (
        456 == $item->ID &&
        ( is_page( \'past-events\' ) || is_singular( \'event\' ) )
    ) {
        $classes[] = \'current-menu-item\';
    }

    return $classes;
}
add_filter( \'nav_menu_css_class\', \'my_special_nav_class\', 10, 2 );

相关推荐

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

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