it-swarm.com.de

Das Entfernen des Containers aus dem wp_nav_menu funktioniert nicht

Ich konvertiere dieses HTML-Menü nach WordPress:

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

ich benutze:

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

aber das HTML, das ich bekomme, ist:

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

Wenn ich ein benutzerdefiniertes Menü verwende, erhalte ich:

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

aber wenn ich kein benutzerdefiniertes Menü 'container' verwende => false funktioniert nicht Irgendeine Lösung?

8
Oterox

[Gelöst] Es funktioniert nicht, wenn Sie sich auf einen nicht existierenden Ort beziehen. z.B. Wenn Sie den Code von einer anderen Stelle kopiert haben oder Ihr Menü oder Ihren Speicherort noch nicht im Dashboard erstellt haben.

z.B. Entfernen Sie ", 'theme_location' => 'primary'" aus dem folgenden Code:

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

so soll es aussehen

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

Es funktioniert ohne Container in meiner Website SocialBlogsiteWebDesign.com

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

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

5
Devin

sie beziehen sich auf die Fallback-Funktion der nav_menus. Dies ist "wp_page_menu" und leider erzeugt es nicht die gleiche Art von Markup wie ein benutzerdefiniertes Menü.

Um dies zu beheben, erstellen Sie Ihr eigenes Fallback-Menü. Ich benutze das:

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

Möglicherweise müssen Sie dies ändern, da mein Thema Menüs auf seine eigene Weise verarbeitet, aber ich denke, Sie haben eine grundlegende Vorstellung davon.

Und wenn Sie wp_nav_menu anrufen, tun Sie es wie wp_nav_menu(array('fallback_cb' => 'my_page_menu'));

Sie können die Klassen auch folgendermaßen mit denen eines benutzerdefinierten Menüs abgleichen:

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

Auf diese Weise reduzieren Sie einige CSS-Regeln ...

5
onetrickpony

Ich habe eine einfache und effiziente Lösung mit str_replace entwickelt, die separat für die Verwendung in Menütabellen anstelle von ul li angewendet werden kann:

$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