You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress菜单链接为空,无法显示标题与属性求助

WordPress菜单异常排查与修复方案

问题现象

菜单可识别添加的菜单项数量,但无法显示标题和正确属性,生成的HTML结构如下:

<ul class="art-hmenu menu-8">
    <li class="menu-item-"><a></a>
    </li>
    <li class="menu-item-"><a></a>
    </li>
</ul>

尝试过的无效代码

从Stack Overflow参考的代码,未解决问题:

//register menu
function register_my_menus() {
  register_nav_menus(
    array('main-menu' => __( 'Main Menu' ) )
  );
}

add_action( 'init', 'register_my_menus' );

//template usage
<?php wp_nav_menu( array( 'theme_location' => 'main-menu' ) ); ?>

//code for adding new menu items
function new_nav_menu_items($items, $args) {
    if( $args->theme_location == 'primary' ){
        $homelink = '<li class="home"><a href="' . home_url( '/' ) . '">' . __('Home') . '</a></li>';
        $items = $homelink . $items;
    }
    return $items;
}
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items', 10, 2 );

当前头部菜单代码

<?php if (theme_get_option('theme_use_default_menu')) { wp_nav_menu( array('theme_location' => 'primary-menu') );} else { ?><nav class="art-nav">
        <div class="art-nav-inner"></div>
    <?php
    echo theme_get_menu(array(
            'source' => theme_get_option('theme_menu_source'),
            'depth' => theme_get_option('theme_menu_depth'),
            'menu' => 'primary-menu',
            'class' => 'art-hmenu'
        )
    );
    get_sidebar('nav'); 
?> 

theme_get_menu函数代码

function theme_get_menu($args = '') {
    $args = apply_filters( 'wp_nav_menu_args', $args );
    $nav_menu = apply_filters( 'pre_wp_nav_menu', null, $args );
    if ( null !== $nav_menu ) {
        return $nav_menu;
    }
    $args = wp_parse_args($args, array('source' => 'Pages', 'depth' => 0, 'menu' => null, 'class' => ''));
    $source = &$args['source'];
    $menu = &$args['menu'];
    $class = &$args['class'];
    if ($menu != null && is_string($menu)) { // theme location
        $location = theme_get_array_value(get_nav_menu_locations(), $menu);
        if ($location) {
            $menu = wp_get_nav_menu_object($location);
            if ($menu) {
                $source = 'Custom Menu';
                $class = implode(' ', array($class, 'menu-' . $menu->term_id));
            }
        }
    }

    if ($source == 'Custom Menu' && $menu != null) {
        $nav_menu = theme_get_list_menu($args);
    } elseif ($source == 'Pages') {
        $nav_menu = theme_get_list_pages(array_merge(array('sort_column' => 'menu_order, post_title'), $args));
    } elseif ($source == 'Categories') {
        $nav_menu = theme_get_list_categories(array_merge(array('title_li' => false), $args));
    }

    return apply_filters( 'wp_nav_menu', $nav_menu, $args );
}

排查与修复步骤

1. 统一菜单位置注册与调用

你注册的菜单位置是main-menu,但主题代码中实际调用的是primary-menu,位置不匹配导致原生菜单函数无法正确获取菜单数据。修改注册代码为:

function register_my_menus() {
  register_nav_menus(
    array('primary-menu' => __( 'Primary Menu' ) )
  );
}
add_action( 'init', 'register_my_menus' );

如果需要保留添加首页链接的功能,同步修改对应函数的位置判断:

function new_nav_menu_items($items, $args) {
    if( $args->theme_location == 'primary-menu' ){
        $homelink = '<li class="home"><a href="' . home_url( '/' ) . '">' . __('Home') . '</a></li>';
        $items = $homelink . $items;
    }
    return $items;
}
add_filter( 'wp_nav_menu_items', 'new_nav_menu_items', 10, 2 );

2. 修复theme_get_list_menu函数(核心问题)

当主题识别到自定义菜单时,会调用theme_get_list_menu($args)生成菜单HTML,但你未提供这个函数的代码——它大概率没有正确提取菜单项的标题和链接属性。找到该函数并修改为以下逻辑:

function theme_get_list_menu($args) {
    // 获取菜单下的所有项目
    $menu_items = wp_get_nav_menu_items($args['menu']->term_id);
    if (empty($menu_items)) return '';

    $output = '<ul class="' . esc_attr($args['class']) . '">';
    foreach ($menu_items as $item) {
        // 正确拼接菜单项的ID、链接和标题
        $output .= sprintf(
            '<li class="menu-item-%d"><a href="%s">%s</a></li>',
            esc_attr($item->ID),
            esc_url($item->url),
            esc_html($item->title)
        );
    }
    $output .= '</ul>';
    return $output;
}

原函数如果没有正确获取$item->title和$item->url,就会生成空的<a>标签和不完整的menu-item-类。

3. 检查主题选项设置

  • 进入WordPress后台「外观」→「自定义」,找到主题菜单相关设置:
    • 若开启theme_use_default_menu,需确保primary-menu位置已分配了创建好的菜单;
    • 若关闭该选项,需将theme_menu_source设置为「Custom Menu」,并确认对应菜单已绑定到primary-menu位置。

4. 临时替代方案(快速修复)

如果暂时无法定位theme_get_list_menu的问题,可以直接用WordPress原生菜单函数替代主题自定义函数,修改头部代码:

<nav class="art-nav">
    <div class="art-nav-inner"></div>
    <?php
    wp_nav_menu( array(
        'theme_location' => 'primary-menu',
        'menu_class' => 'art-hmenu'
    ) );
    get_sidebar('nav'); 
    ?>
</nav>

内容的提问来源于stack exchange,提问作者Niels Voorn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:39:54