web-dev-qa-db-fra.com

La suppression du conteneur de wp_nav_menu ne fonctionne pas

Je convertis ce menu html en wordpress:

<ul>
    <li><a href="/" class="current"><span>Home</span></a></li>
    <li><a href="/"><span>About</span></a></li>
</ul>

j'utilise:

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

mais le html que je reçois est:

<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>

Si j'utilise un menu personnalisé, alors je reçois:

<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>

mais si je n'utilise pas de menu personnalisé 'conteneur' => false ne fonctionne pas. Aucune solution?

8
Oterox

[RESOLU] CELA NE FONCTIONNE PAS lorsque vous vous référez à un emplacement inexistant. par exemple. lorsque vous avez copié le code ailleurs ou que vous n'avez pas encore créé votre menu ou votre emplacement dans le tableau de bord.

par exemple. remove ", 'theme_location' => 'primaire'" du code suivant:

    wp_nav_menu( array( 'container'=> false, 'menu_class'=> false, 'menu_id'=> 'ia_toplevel', 'theme_location' => 'primary' ) );

il devrait donc ressembler

    wp_nav_menu( array( 'container'=> false, 'menu_class'=> false, 'menu_id'=> 'ia_toplevel' ) );

Cela fonctionne bien SANS conteneur dans mon site Web SocialBlogsiteWebDesign.com

15
sergio
Try: <?php wp_nav_menu( array( 'container' => '' ) ); ?>

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

5
Devin

vous faites référence à la fonction de secours du nav_menus. C'est "wp_page_menu" et malheureusement, cela ne produit pas le même type de balisage qu'un menu personnalisé.

Pour résoudre ce problème, créez votre propre menu de secours. J'utilise ceci:

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;
}

Vous devrez peut-être changer cela car mon thème gère les menus à sa manière, mais je pense que vous avez compris l'idée de base.

Et quand vous appelez wp_nav_menu faites-le comme wp_nav_menu(array('fallback_cb' => 'my_page_menu'));

Vous pouvez également faire correspondre les classes à celles d'un menu personnalisé en utilisant ceci:

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;
}

De cette façon, vous réduisez quelques règles CSS ...

5
onetrickpony

J'ai développé une solution simple et efficace en utilisant str_replace, qui peut être appliqué séparément pour une utilisation dans les tables de menus au lieu de 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;
1
Eduardo Carrega