在WordPress中,使用register_nav_menu()注册菜单位置后,就可以在后台创建菜单,并在这个位置显示,要想让这个位置生效,需要在显示菜单的地方调用wp_nav_menu()函数,本文介绍如何给由wp_nav_menu()产生的菜单添加额外的菜单项目。
方法的关键是使用filter wp_nav_menu_items,这个filter可以接受两个参数
- 第一个是菜单项(后台添加的)
- 另一个是一个包含菜单信息的数组,例如菜单位置,想给特定菜单添加自定义项目时会用到
简单的使用方法如下:
add_filter('wp_nav_menu_items', 'add_custom_links', 10, 2); function add_custom_links($items, $args) { $custom_items = "<li><a href=#>Custom Menu Item</a></li>"; if( $args->theme_location == 'secondary'){ return $items.$custom_items; } return $items; }
这段代码将在位置为secondary的菜单末尾添加名为Custom Menu Item的菜单项。
这段代码没什么实际用途,下面展示一段实际中可能用到的代码示例
——给位置为secondary的菜单末尾添加注册、登陆和找回密码的链接。
add_filter('wp_nav_menu_items', 'add_custom_links', 10, 2); function add_custom_links($items, $args) { if( $args->theme_location == 'secondary'){ if ( is_user_logged_in() ) { $user_menu = "<li><a href='".wp_logout_url(home_url())."'>".__('Sign Out', "your_text_domain")."</a></li>"; } else { $redirect = ( is_home() )? home_url() : get_permalink(); $user_menu = "<li><a href='".wp_login_url($redirect)."'>".__('Sign In',"your_text_domain")."</a></li> <li><a href='".home_url('wp-login.php?action=register')."'>".__('Register', "your_text_domain")."</a></li> <li><a href='".wp_lostpassword_url(get_option('site_url'))."'>".__('Lost Password?', "your_text_domain")."</a></li>"; } return $items.$user_menu; } return $items; }
如果不适用$args->theme_location判断是哪个菜单,就是给所有菜单添加。
如何判断菜单的位置?
在functions.php中找到注册菜单位置的代码
register_nav_menu( 'secondary', __( 'Secondary Menu') );
secondary是菜单位置ID,是我们需要的,Secondary Menu是菜单位置的有意义的名称,可以在后台外观->菜单选项卡下的位置栏目中看到。
你代码中的10,2 这个是什么意思呢
10指执行优先级,2指需要传递两个参数