从wp_NAV_MENU中删除容器不起作用

时间:2010-11-08 作者:Oterox

我正在将此html菜单转换为wordpress:

<ul>
    <li><a href="/" class="current"><span>Home</span></a></li>
    <li><a href="/"><span>About</span></a></li>
</ul>
我使用:

wp_nav_menu(array(
 \'menu\'=>\'mainmenu\' ,
 \'container\'       => false, 
 \'link_before\'     => \'<span>\',
 \'link_after\'      => \'</span>\',
 \'theme_location\'  => \'primary\')
 );
但我得到的html是:

<div class="menu">
    <ul>
        <li class="current_page_item"><a href="http://localhost/goodsoil/" title="Home"><span>Home</span></a></li>
        <li class="page_item page-item-2"><a href="http://localhost/goodsoil/?page_id=2" title="About"><span>About</span></a></li>
    </ul>
</div>
如果使用自定义菜单,则会得到:

<ul id="menu-test" class="menu">
    <li id="menu-item-6" class="menu-item menu-item-type-custom current-menu-item current_page_item menu-item-home menu-item-6"><a href="url/"><span>Home</span></a></li>
    <li id="menu-item-5" class="menu-item menu-item-type-post_type menu-item-5"><a href="url/?page_id=2"><span>About</span></a></li>
</ul>
但是如果我不使用自定义菜单“container”=>“false”没有任何解决方案?

6 个回复
SO网友:sergio

[已解决]当您指的是不存在的位置时,它不起作用。e、 g.当您从其他地方复制了代码,或者尚未在dasboard中创建菜单或位置时。

e、 g.从以下代码中删除“,”theme\\u location“=>”primary“:

    wp_nav_menu( array( \'container\'=> false, \'menu_class\'=> false, \'menu_id\'=> \'ia_toplevel\', \'theme_location\' => \'primary\' ) );
所以它应该看起来像

    wp_nav_menu( array( \'container\'=> false, \'menu_class\'=> false, \'menu_id\'=> \'ia_toplevel\' ) );
它在我的网站上没有容器也能正常工作SocialBlogsiteWebDesign.com

SO网友:user2190488

找到了解决方案。

只需将“ul”用于“容器”

wp_nav_menu(array(
 \'menu\'=>\'mainmenu\' ,
 \'container\' => \'ul\',
 \'menu_class\'=> \'\',
 \'link_before\'     => \'<span>\',
 \'link_after\'      => \'</span>\',
 \'theme_location\'  => \'primary\')
 );

SO网友:Devin
Try: <?php wp_nav_menu( array( \'container\' => \'\' ) ); ?>

http://codex.wordpress.org/Function_Reference/wp_nav_menu

SO网友:onetrickpony

您指的是nav\\U菜单的回退功能。这是“wp\\u page\\u menu”,不幸的是,它不会产生与自定义菜单相同类型的标记。

要解决此问题,请创建自己的回退菜单。我使用的是:

function my_page_menu($args){
  $menu = \'\';
  $args[\'echo\'] = false;
  $args[\'title_li\'] = \'\';

  // If the front page is a page, add it to the exclude list
  if (get_option(\'show_on_front\') == \'page\') $args[\'exclude\'] = get_option(\'page_on_front\');

  $menu .= str_replace(array("\\r", "\\n", "\\t"), \'\', wp_list_pages($args));

  if($menu):
    if($args[\'container\']) $menu = \'<\'.$args[\'container\'].\' class="\'.$args[\'container_class\'].\'">\'.$menu;
    $menu .= \'<ul class="\'.$args[\'menu_class\'].\'">\'.$menu;

    // add \'home\' menu item
    $menu .= \'<li class="home \'.((is_front_page() && !is_paged()) ? \'current-menu-item\' : null).\'"><a href="\'.home_url(\'/\').\'" title="\'.__("Home Page").\'">\'.$args[\'link_before\'].__("Home").$args[\'link_after\'].\'</a></li>\';

    $menu .= \'</ul>\';
    if($args[\'container\']) $menu .= \'</\'.$args[\'container\'].\'>\\n"\';
    $menu = apply_filters(\'wp_page_menu\', $menu, $args);
  endif;

  echo $menu;
}
你可能需要改变这一点,因为我的主题以自己的方式处理菜单,但我想你已经了解了基本的想法。

当你打电话的时候wp_nav_menu 像这样做wp_nav_menu(array(\'fallback_cb\' => \'my_page_menu\'));

还可以使用以下方法将类与自定义菜单中的类进行匹配:

add_filter(\'page_css_class\', \'atom_page_css_classes\', 420, 2);
function atom_page_css_classes($classes, $page){
  // overwrite and use page (safe) name instead of ID; nobody styles IDs...
  $new_classes = array(\'page-\'.$page->post_name);

  // adjust active menu classes to match the ones added by wp_nav_menu()
  foreach($classes as $class)
    if($class == \'current_page_item\') $new_classes[] = \'current-menu-item\';
    elseif($class == \'current_page_parent\') $new_classes[] = \'current-menu-parent\';
    elseif($class == \'current_page_ancestor\') $new_classes[] = \'current-menu-ancestor\';

  return $new_classes;
}
这样可以减少一些CSS规则。。。

SO网友:Eduardo Carrega

我使用str_replace, 可单独应用于菜单表中,而不是ul li:

$menu = wp_nav_menu( array( 
    \'theme_location\' => \'main-menu\', 
    \'container_id\' => \'mainMenu\', 
    \'container_class\' => \'ddsmoothmenu\',
    \'echo\' => FALSE
));

$menu = str_replace(
    array(\'ul id="main-menu" class="menu">\',\'/ul>\',\'li\',\'/li>\'), 
    array(\'table id="main-menu" class="menu">tr>\',\'/tr>/table>\',\'td\',\'/td>\'), 
    $menu
);

echo $menu;

SO网友:apple

Try This

<?php wp_nav_menu( array( \'menu\' => \'Menu\',\'link_before\' => \'<span>\', \'link_after\' => \'</span>\' ) ); ?>
结束

相关推荐

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