在WordPress中,“自定义菜单”相关的常用函数可分为注册、显示、获取、检测、Walker类五大类。下面按使用频率由高到低整理,并给出典型用法和一句话说明,方便速查。
注册菜单位置
register_nav_menus()
一次性注册多个菜单位置(供后台“外观→菜单”分配)。
add_action( 'after_setup_theme', function () {
register_nav_menus( [
'primary' => __( '顶部主导航', 'mytheme' ),
'footer' => __( '底部链接', 'mytheme' ),
'handheld' => __( '移动端抽屉菜单', 'mytheme' ),
] );
} );
在前端输出菜单
wp_nav_menu()
最常用,几乎所有主题都用它渲染菜单。
wp_nav_menu( [
'theme_location' => 'primary', // 对应 register_nav_menus 的 key
'container' => 'nav',
'container_class' => 'main-nav',
'menu_class' => 'nav-list',
'fallback_cb' => false, // 没有菜单时不输出页面列表
'depth' => 2, // 只支持两级
] );
获取菜单数据(不直接输出)
wp_get_nav_menu_object($menu)
通过菜单名/ID/Slug获取菜单对象。
$menu_obj = wp_get_nav_menu_object( 'guest-menu' ); // 返回 WP_Term
返回菜单条目数组(WP_Post类型)。
$items = wp_get_nav_menu_items( $menu_obj->term_id );
判断相关
has_nav_menu($location)
检测某菜单位置是否已分配菜单。
if ( has_nav_menu( 'primary' ) ) {
wp_nav_menu( [ 'theme_location' => 'primary' ] );
}
is_nav_menu($menu)
检测给定slug/id/name是否为有效菜单。
Walker类(自定义HTML结构)
Walker_Nav_Menu
继承它可彻底改写子菜单等输出,常见于Bootstrap/Tailwind导航。
class BS5_Nav_Walker extends Walker_Nav_Menu {
function start_lvl( &$output, $depth = 0, $args = null ) {
$output .= '<ul class="dropdown-menu">';
}
function start_el( &$output, $item, $depth = 0, $args = null, $id = 0 ) {
// 自定义 <li> 与 <a> 的 class、data-bs-toggle 等
}
}
调用:
wp_nav_menu( [
'theme_location' => 'primary',
'walker' => new BS5_Nav_Walker(),
] );
其它辅助函数
wp_create_nav_menu($name)
以代码方式新建菜单(一次性脚本常用)。
wp_delete_nav_menu($menu)
wp_update_nav_menu_object(menu id,args)
速查表(一行记忆)
注册:register_nav_menus()
显示:wp_nav_menu()
拿对象:wp_get_nav_menu_object()
拿条目:wp_get_nav_menu_items()
判断:has_nav_menu()/is_nav_menu()
改结构:继承Walker_Nav_Menu
原文
http://www.dulizhan.fj.cn/wordpress/261.html