You need to enable JavaScript to run this app. 如何在WordPress中为非菜单子页面的内容给对应菜单项添加active激活类
优惠活动
大模型
产品
解决方案
定价
更多

如何在WordPress中为非菜单子页面的内容给对应菜单项添加active激活类

方案1(使用Events自定义文章类型原生存档页,最推荐)

直接通过WordPress原生nav_menu_css_class过滤器动态给对应菜单项添加高亮类,不依赖任何固定ID、别名,抗修改性极强。
将以下代码添加到你当前主题的functions.php文件,或者自定义功能插件中即可:

add_filter( 'nav_menu_css_class', 'highlight_events_cpt_menu', 10, 2 );
function highlight_events_cpt_menu( $classes, $item ) {
    // 替换为你注册Events自定义文章类型时使用的别名
    $cpt_slug = 'event';

    if ( is_singular( $cpt_slug ) ) {
        // 匹配指向CPT存档页的菜单项
        if ( $item->url === get_post_type_archive_link( $cpt_slug ) ) {
            // 添加WordPress原生高亮类,和默认高亮样式完全兼容
            $classes[] = 'current-page-ancestor';
            $classes[] = 'current-menu-item';
        }
    }
    return $classes;
}

使用该方案无需额外配置,后续哪怕客户修改了活动列表页的slug、标题、菜单排序,都不会影响高亮效果。


方案2(使用自定义独立页面作为活动列表页)

如果你没有用CPT自带的存档功能,而是手动创建了一个独立页面来展示活动预告列表,可以用自定义字段标记该列表页,再通过过滤器匹配:

  1. 编辑你创建的events列表页,添加一个自定义字段:键为is_events_list_page,值为1
  2. 将以下代码添加到主题functions.php或自定义功能插件中:
add_filter( 'nav_menu_css_class', 'highlight_events_cpt_menu', 10, 2 );
function highlight_events_cpt_menu( $classes, $item ) {
    // 替换为你注册Events自定义文章类型时使用的别名
    $cpt_slug = 'event';

    if ( is_singular( $cpt_slug ) ) {
        // 查询标记为活动列表页的页面
        $events_list_page = get_posts( [
            'post_type' => 'page',
            'meta_key' => 'is_events_list_page',
            'meta_value' => '1',
            'numberposts' => 1,
            'post_status' => 'publish'
        ] );

        if ( !empty( $events_list_page ) && $item->object_id == $events_list_page[0]->ID ) {
            $classes[] = 'current-page-ancestor';
            $classes[] = 'current-menu-item';
        }
    }
    return $classes;
}

该方案同样不受页面标题、slug、菜单排序修改的影响,后续如果客户要换活动列表页,只需要给新页面加上同样的自定义字段即可。

内容的提问来源于stack exchange,提问作者Steve Gibbons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 22:06:03