WordPress首页可以是一个什么都不带的展示型页面,比如仅有logo和几张图片,点击图片才能进入真正的网站,此时需要获取重定向的地址。因为首页地址已经被该页面占用,所以要获取主菜单位置上启用的菜单的第一项作为重定向地址。
获取指定菜单位置的第一项
要获取的菜单位置如下图所示

需要用到下面几个函数
wp_get_nav_menus()
功能:获取所有后台(Appearance->Menus)创建的菜单项,无论菜单是否已经分配位置
使用方式
wp_get_nav_menus( $args )
参数
$args = array( 'hide_empty' => false, 'orderby' => 'none' )
实例:
假设创建了两个菜单,分别是nav bar和footer menu,其中nav bar分配给位置Primary Menu,footer menu未分配,调用该函数的返回值如下
Array
(
[0] => stdClass Object
(
[term_id] => 3
[name] => nav bar
[slug] => nav-bar
[term_group] => 0
[term_taxonomy_id] => 3
[taxonomy] => nav_menu
[description] =>
[parent] => 0
[count] => 7
)
[1] => stdClass Object
(
[term_id] => 10
[name] => footer menu
[slug] => footer-menu
[term_group] => 0
[term_taxonomy_id] => 10
[taxonomy] => nav_menu
[description] =>
[parent] => 0
[count] => 0
)
)get_nav_menu_locations()
作用:获取已经注册的菜单位置以及分配给该位置的菜单项的term_id
使用方法:
$menus = get_nav_menu_locations();
实例:
主题只有一个menu位置,nav bar分配给此位置,nav bar的term_id是3,调用该函数获取的结果如下:
Array
(
[primary-menu] => 3
)wp_get_nav_menu_items
作用:获取指定菜单的所有菜单项
使用方式:参考Codex
获取指定菜单位置的第一项的代码
//获取创建的所有菜单
$menus = wp_get_nav_menus();
//获取所有注册的菜单位置
$menu_locations = get_nav_menu_locations();
//primary-menu是我们希望选择的菜单位置的ID
$location_id = 'primary-menu';
if (isset($menu_locations[ $location_id ])) {
//如果是我们要找的菜单位置
foreach ($menus as $menu) {
// 如果menu的term_id与该位置上分配的菜单term_id相同
//说明是我们要找的菜单
if ($menu->term_id == $menu_locations[ $location_id ]) {
//获取该菜单所有的菜单项
$menu_items = wp_get_nav_menu_items($menu->term_id);
//获取当前网站的地址,我们要找的第一项不能是网站的地址
$blog_url = get_bloginfo('url');
foreach( $menu_items as $item) {
$title = $item->title; //菜单项的名称
$redirect = $item->url; //菜单项的固定链接
//如果该菜单项地址不是网站地址,返回该地址,完成查询
if( trim($redirect,'/') != $blog_url) break;
}
break;
}
}
}
查询结果:
找到了About菜单的地址,http://domain.com/about/
为了提高灵活性,还可以在主题选项中放置一个选项,允许用户输入首页的重定向地址,如果用户指定了地址,就不需要再自动判断。
nice 多谢博主。
sola,如何获取菜单名称呢
这个怎么样
http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_object
也是偶然发现这儿博客, 很实用,很强大!