Eliminarea containerului din wp_nav_menu nu funcționează
Convertesc acest meniu HTML în WordPress:
<ul>
<li><a href="/" class="current"><span>Acasă</span></a></li>
<li><a href="/"><span>Despre</span></a></li>
</ul>
Folosesc:
wp_nav_menu(array(
'menu'=>'mainmenu' ,
'container' => false,
'link_before' => '<span>',
'link_after' => '</span>',
'theme_location' => 'primary')
);
dar HTML-ul pe care îl obțin este:
<div class="menu">
<ul>
<li class="current_page_item"><a href="http://localhost/goodsoil/" title="Acasă"><span>Acasă</span></a></li>
<li class="page_item page-item-2"><a href="http://localhost/goodsoil/?page_id=2" title="Despre"><span>Despre</span></a></li>
</ul>
</div>
Dacă folosesc un meniu personalizat atunci obțin:
<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>Acasă</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>Despre</span></a></li>
</ul>
dar dacă nu folosesc un meniu personalizat, 'container'=>false nu funcționează Există vreo soluție?

[REZOLVAT] NU FUNCȚIONEAZĂ când te referi la o locație inexistentă, de exemplu când ai copiat codul de altundeva sau nu ai creat încă meniul sau locația în panoul de control.
De exemplu, elimină ", 'theme_location' => 'primary'" din următorul cod:
wp_nav_menu( array( 'container'=> false, 'menu_class'=> false, 'menu_id'=> 'ia_toplevel', 'theme_location' => 'primary' ) );
astfel încât să arate astfel:
wp_nav_menu( array( 'container'=> false, 'menu_class'=> false, 'menu_id'=> 'ia_toplevel' ) );
Funcționează perfect FĂRĂ container pe site-ul meu SocialBlogsiteWebDesign.com

Mai întâi creează-ți meniul în admin la aspect->meniu
apoi apelează wp_nav_menu(array('menu'=>'<nume_meniu>','container'=>false))

Ei bine, acesta este un comportament destul de ciudat :/ Cred că aceasta este o problemă care ar trebui urmărită.

Cred că exact asta caut și eu, cum să elimin div-ul inutil din meniul meu de navigare!

Într-un fel acest răspuns funcționează, dar nu cu șir gol sau false
. Mulțumesc.

Încercați: <?php wp_nav_menu( array( 'container' => '' ) ); ?>

Este verificat în cod ca if ( $args->container )
, deci false
sau șir gol
nu fac nicio diferență.

Rarst, tocmai am testat pe un site la care am lucrat recent, iar setarea 'container' => '' a funcționat de fapt. Cred că nu verifică valoarea, ci mai degrabă o setează la null și astfel nu afișează datele.

te referi la funcția de rezervă a nav_menus. Aceasta este "wp_page_menu" și din păcate nu produce același tip de markup ca un meniu personalizat.
Pentru a remedia aceasta, creează propriul meniu de rezervă. Eu folosesc acesta:
function my_page_menu($args){
$menu = '';
$args['echo'] = false;
$args['title_li'] = '';
// Dacă pagina principală este o pagină normală, o adăugăm la lista de exclus
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;
// adaugă elementul 'home' în meniu
$menu .= '<li class="home '.((is_front_page() && !is_paged()) ? 'current-menu-item' : null).'"><a href="'.home_url('/').'" title="'.__("Pagina Principală").'">'.$args['link_before'].__("Acasă").$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;
}
Poate fi necesar să modifici acest cod deoarece tema mea gestionează meniurile în mod propriu, dar cred că înțelegi ideea de bază.
Și când apelezi wp_nav_menu
fă-o astfel: wp_nav_menu(array('fallback_cb' => 'my_page_menu'));
De asemenea, poți sincroniza clasele cu cele ale unui meniu personalizat folosind:
add_filter('page_css_class', 'atom_page_css_classes', 420, 2);
function atom_page_css_classes($classes, $page){
// suprascrie și folosește numele paginii (sigur) în loc de ID; nimeni nu stilizează ID-uri...
$new_classes = array('page-'.$page->post_name);
// ajustează clasele de meniu activ pentru a se potrivi cu cele adăugate de 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;
}
În acest fel reduci câteva reguli CSS...

Am dezvoltat o soluție simplă și eficientă folosind str_replace
, care poate fi aplicată separat pentru utilizarea în tabele de meniu în loc 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;

TL;DR - folosește
<?php
wp_nav_menu(
array(
// aici introdu ID-ul meniului etc.
'items_wrap' => '%3$s', // elimină <ul>-ul implicit
'container' => '', // elimină <div>-ul exterior
)
);
Structura implicită pentru wp_nav_menu
cu cât mai puțini parametri va fi
<div class="menu-blahblah-container">
<ul id="blahblah">
<li class="menu-item">
<li class="menu-item">
<!-- etc -->
Parametrul items_wrap
are valoarea implicită <ul id="%1$s" class="%2$s">%3$s</ul>
- deci există câteva modalități ușoare de a manipula lucrurile în afara întrebării de aici. Dar dacă vrei doar să elimini complet acel ul
, schimbă-l în %3$s
, ceea ce înseamnă practic "toate elementele din interiorul ul-ului; fără ul."
Acum avem:
<div class="menu-blahblah-container">
<li class="menu-item">
<li class="menu-item">
<!-- etc -->
Ai rămas cu o grămadă de li
-uri, ceea ce este minunat! Dar ele sunt prinse în interiorul unui div
, ceea ce nu este minunat dacă vrei să le folosești alături de alte li
-uri personalizate în propriul tău ul
făcut de mână.
Acum adaugă 'container' => ''
așa cum au sugerat alții și ești liber: doar partea cu elementele de listă din meniu, fără elemente container!
<li class="menu-item">
<li class="menu-item">
<!-- etc -->
