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
也是偶然发现这儿博客, 很实用,很强大!