WP笔记

WordPress:获取指定菜单位置的第一项

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/

为了提高灵活性,还可以在主题选项中放置一个选项,允许用户输入首页的重定向地址,如果用户指定了地址,就不需要再自动判断。

4条评论

评论已关闭。