wordpress菜单调用的几种常见形式

wordpress 2025-08-03 19

在WordPress主题开发里,“菜单”在前端页面中常见的调用/输出形式可以归纳为5种,按出现频率从高到低列给你,并给出最简代码片段,方便直接复制粘贴。

标准菜单位置调用(99%场景)

后台“外观→菜单”里把菜单A指派到菜单位置primary,模板里写:

// header.php 或任意模板
if ( has_nav_menu( 'primary' ) ) {
    wp_nav_menu( [
        'theme_location' => 'primary', // 与 register_nav_menus() 对应
        'container'      => 'nav',
        'container_class'=> 'site-nav',
        'menu_class'     => 'nav-list',
    ] );
}

这是最官方、最兼容、最SEO的方式。

直接指定某个菜单(不依赖菜单位置)

有时你想无视菜单位置,只想输出“名叫Guest Menu”的菜单:

wp_nav_menu( [
    'menu'           => 'Guest Menu', // 也可以用 ID 或 slug
    'container'      => '',
    'menu_class'     => 'guest-nav',
] );

适合在登录/未登录时切换菜单(配合is_user_logged_in())。

用Walker输出自定义结构(Bootstrap/Tailwind/多级)

wp_nav_menu( [
    'theme_location' => 'primary',
    'walker'         => new My_Walker_Nav_Menu(),
] );

Walker里可以完全控制子菜单的class/data属性。

用wp_get_nav_menu_items()自己循环(极简/轻量)

如果你只要一级链接,不想用 ul/li 的默认结构:

$items = wp_get_nav_menu_items( 'Quick Links' );
if ( $items ) {
    echo '<div class="quick-links">';
    foreach ( $items as $item ) {
        printf(
            '<a href="%s" class="link">%s</a>',
            esc_url( $item->url ),
            esc_html( $item->title )
        );
    }
    echo '</div>';
}

适合页脚一排纯链接、面包屑、侧边栏快捷入口等。

用简码或小工具

简码:[menu name=”Footer Menu”]

需插件(如 Shortcode in Menus)或自己在functions.php注册:

add_shortcode( 'menu', function ( $atts ) {
    $atts = shortcode_atts( [ 'name' => '' ], $atts );
    ob_start();
    wp_nav_menu( [ 'menu' => $atts['name'] ] );
    return ob_get_clean();
} );

小工具:

后台“外观→小工具”里拖一个“导航菜单”区块到任何小工具区域(侧边栏、页脚、全站模板部件)。

一句话总结

常规输出 → wp_nav_menu( [‘theme_location’=>’xxx’] )

无视位置 → wp_nav_menu( [‘menu’=>’菜单名’] )

改结构 → 传自定义 Walker

极简循环 → wp_get_nav_menu_items() 自己 echo

非主题 → 简码 / 小工具

推荐模板