如何有条件地将“主页”菜单项添加到自定义菜单?

时间:2012-03-16 作者:Steven

Original question如何使用slug而不是ID获取菜单项

我需要获得一个特定的菜单,但我不能使用ID,因为我的dev上的菜单ID与我的staging和prod服务器上的菜单ID不同。

WP doc说wp_get_nav_menu_items可与菜单slug一起使用。但我怎么知道是什么鼻涕虫产生的呢?我用我认为是鼻涕虫的东西进行了测试,但没有菜单项。

我最初的想法是,我需要获取一个菜单,以便获取数组/对象中的菜单项,以便添加额外的菜单项。

关于如何使用slug获取菜单项,几乎没有文档,所以我有点卡住了。如果你应该有答案,请加上这个。

我的目标是根据具体情况添加“主页”链接。

多亏了这些反馈,我重新编写了我的问题,使其更有意义;)

4 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

因此,根据您的评论:

wp_nav_menu 是我现在使用的。但现在我必须根据特定条件添加“主页”菜单项

我将提出一个解决方案,允许您根据任意条件,使用wp_nav_menu_items 过滤器(see tutorial here):

<?php
function wpse45802_add_nav_menu_home_link( $items, $args ) {
    $home_link = \'\';
    if ( INSERT CONDITIONALS HERE ) {
        // Determine menu item class
        $home_link_class = ( is_front_page() ? \' class="current-menu-item"\' : \'\' );
        // Build home link markup
        $home_link = \'<li\' . $home_link_class . \'>\';
        $home_link .= $args->before;
        $home_link .= \'<a href="\' . home_url() . \'">\';
        $home_link .= $args->link_before . \'Home\' . $args->link_after;
        $home_link .= \'</a>\';
        $home_link .= $args->after;
        $home_link .= \'</li>\';
    }
    // Merge home link menu item with nav menu items
    $modified_items = $home_link . $items;
    // Return the result
    return $modified_items;
}
add_filter( \'wp_nav_menu_items\', \'wpse45802_add_nav_menu_home_link\', 10, 2 );
?>
如果需要进一步限制过滤器,可能只需过滤某些theme_location 输出,让我知道,我会更新。另外,如果你能描述你的实际条件,我也会添加这些条件。

SO网友:Mamaduka

您可以使用theme_location 参数,请参见codex 第页了解更多信息。

这就是Twenty Eleven使用此方法获取菜单的方式-http://core.trac.wordpress.org/browser/trunk/wp-content/themes/twentyeleven/header.php#L118

SO网友:Shebo

是否要显示特定菜单?为什么不使用更简单的函数,wp_nav_menu, 并传递一个你想要的菜单名的参数?在下一个示例中,只需将菜单名替换为$menu\\u name即可:

<?php 
$menu_args = array(\'menu\' => $menu_name );
wp_nav_menu( $menu_args ); 
?>
有关该功能的更多信息:http://codex.wordpress.org/Function_Reference/wp_nav_menu

SO网友:Stephen Harris

您可以使用wp_get_nav_menu_object 按ID、slug或名称(按该顺序匹配)获取导航菜单。

 $menu_obj =wp_get_nav_menu_object($id_slug_or_name);
要按主题位置获取菜单对象,可以使用此函数(see related question)

 function wpse45700_get_menu_by_location( $location ) {
  if( empty($location) ) return false;

  $locations = get_nav_menu_locations();
  if( ! isset( $locations[$location] ) ) return false;

  $menu_obj = get_term( $locations[$location], \'nav_menu\' );

  return $menu_obj;
}
存储在菜单对象中$menu_obj; 是ID:$menu_obj->ID;

当然,如果您只是简单地显示菜单,正如其他两个答案所说,您可以使用wp_nav_menu 它接受ID、slug或name(按该顺序匹配)

结束

相关推荐

Menu API not switching menus?

我正在使用菜单API,我想切换到其他菜单,但出于某种原因,它保留了第一个菜单这是我的密码在函数中。php add_action( \'init\', \'register_my_menus\',10 ); function register_my_menus() { register_nav_menu(\'main-navigation\', \'Main Navigation\'); } 下面是我的主题文件(header.ph