在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是菜单位置的有意义的名称,可以在后台外观->菜单选项卡下的位置栏目中看到。

2条留言

  1. 你代码中的10,2 这个是什么意思呢

    1. 10指执行优先级,2指需要传递两个参数

评论功能已关闭