Eliminarea containerului din wp_nav_menu nu funcționează

8 nov. 2010, 16:47:12
Vizualizări: 46.4K
Voturi: 15

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?

2
Comentarii

Ce înseamnă prin dacă nu utilizez un meniu personalizat? Poți, te rog, să descrii mai clar în ce condiții obții rezultatul dorit și când nu?

Rarst Rarst
8 nov. 2010 22:33:48

Tema mea suportă meniuri personalizate. Dacă folosesc un meniu personalizat, 'container'=>false funcționează corect, dar dacă nu, nu funcționează. Dacă folosesc 'container'=>'' se întâmplă același lucru.

Oterox Oterox
9 nov. 2010 17:29:11
Toate răspunsurile la întrebare 7
4
19

[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

26 apr. 2011 01:28:10
Comentarii

Se pare că nu funcționează în WordPress 3.9

tepkenvannkorn tepkenvannkorn
22 apr. 2014 03:42:46

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

Warface Warface
11 mai 2014 03:40:44

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

enguerranws enguerranws
26 mai 2020 11:12:44

... sau nu-l elimina, și de fapt ia un minut să creezi o locație de meniu.

squarecandy squarecandy
14 iul. 2023 06:15:56
3

Am găsit soluția.

Pur și simplu folosește "ul" pentru 'container'

wp_nav_menu(array(
 'menu'=>'mainmenu' ,
 'container' => 'ul',
 'menu_class'=> '',
 'link_before'     => '<span>',
 'link_after'      => '</span>',
 'theme_location'  => 'primary')
 );
7 ian. 2020 18:20:46
Comentarii

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

Krys Krys
5 oct. 2020 17:21:22

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

Alexander Ivashchenko Alexander Ivashchenko
13 mai 2021 15:41:36

asta mi-a salvat viața dintr-un iad, am încercat toate tutorialele și niciunul nu funcționa cu versiunile cele mai recente, acesta a funcționat exact cum voiam

Amir Rahman Amir Rahman
12 oct. 2021 06:00:59
4
Încercați: <?php wp_nav_menu( array( 'container' => '' ) ); ?>

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

8 nov. 2010 17:34:07
Comentarii

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

Rarst Rarst
8 nov. 2010 22:34:52

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.

tw2113 tw2113
9 nov. 2010 00:21:57

'container' => '' nu funcționează pentru mine. Folosesc wp 3.0.1

Oterox Oterox
9 nov. 2010 17:25:42

nu funcționează nici pentru mine... cu wp 3.2.1

papachan papachan
1 dec. 2011 14:11:43
0

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

23 dec. 2010 17:05:26
1

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;
13 iun. 2012 00:09:07
Comentarii

Aceasta este o idee proastă, deoarece va eșua dacă vor exista vreodată modificări în codul generat de nucleu.

squarecandy squarecandy
14 iul. 2023 06:13:26
0

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 -->
14 iul. 2023 06:12:13
0
-1

Încearcă asta

<?php wp_nav_menu( array( 'menu' => 'Meniu','link_before' => '<span>', 'link_after' => '</span>' ) ); ?>
17 ian. 2012 11:02:38