在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
非主题 → 简码 / 小工具
原文
http://www.dulizhan.js.cn/wordpress/7028.html