Meniu de navigare cu 3 niveluri nu afișează toate nivelurile

11 mar. 2012, 04:37:38
Vizualizări: 28.6K
Voturi: 0

Am un meniu de navigare cu 3 niveluri care ar trebui să apară lângă toate paginile site-ului, cu excepția paginii principale. Problema este că doar 2 din cele 3 niveluri sunt afișate în meniu când îl afișez folosind wp_nav_menu. Am încercat să specific parametrul depth și fără el, dar fără succes. Folosesc tema Roots dacă acest lucru ajută.

Vezi mai jos o imagine cu modul în care arată meniul în secțiunea Appearance > Menus.

Exemplu meniu cu 3 niveluri în WordPress

Problema, după cum se poate vedea mai sus, este că "Production Solutions" și "Avalanche" sunt afișate, dar elementele copil de sub Avalanche nu apar. Și nu este o problemă de stil, pur și simplu al treilea nivel nu este generat deloc. Nu folosesc niciun walker personalizat sau altceva, acestea sunt funcțiile standard de înregistrare și afișare a meniului de navigare.

Acesta este codul care înregistrează toate meniurile mele de navigare:

register_nav_menus(array(
    'accordion_navigation' => __('Page Accordion Navigation', 'roots'),
    'footer_navigation_left' => __('Footer Navigation Left', 'roots'),
    'footer_navigation_solutions' => __('Footer Product Solutions', 'roots'),
    'footer_navigation_news' => __('Footer News & Events', 'roots'),
    'footer_navigation_about' => __('Footer About', 'roots')
));

În șablonul paginii mele am acest cod pentru afișarea meniului:

wp_nav_menu(array('theme_location' => 'accordion_navigation'));

Îmi scapă ceva aici?

2
Comentarii

Ce se întâmplă dacă setezi 'depth' => 0?

mor7ifer mor7ifer
11 mar. 2012 05:01:32

Din păcate, nu funcționează :(

Dwayne Charrington Dwayne Charrington
11 mar. 2012 05:21:09
Toate răspunsurile la întrebare 2
2

Am rezolvat în sfârșit problema, a fost din cauza unei valori implicite în tema Roots care suprascria parametrul depth pentru un hook numit wp_nav_menu_args (despre care nici măcar nu știam că există). Codul poate fi găsit în directorul rădăcină al temei, în folderul "inc", într-un fișier numit roots-cleanup.php.

Codul original arată astfel:

function roots_nav_menu_args($args = '') {
  $args['container']  = false;
  $args['depth']      = 2;
  $args['items_wrap'] = '<ul class="nav">%3$s</ul>';
  if (!$args['walker']) {
    $args['walker'] = new Roots_Nav_Walker();
  }
  return $args;
}

După cum puteți vedea, valoarea depth este setată la 2, chiar dacă specifici un parametru depth în funcția wp_nav_menu, această funcție anume suprascrie argumentele meniului pentru adâncime.

Tot ce am făcut a fost să măresc valoarea depth la o valoare extrem de mare pe care nu o voi atinge niciodată, de exemplu 8, astfel:

function roots_nav_menu_args($args = '') {
  $args['container']  = false;
  $args['depth']      = 8;
  $args['items_wrap'] = '<ul class="nav">%3$s</ul>';
  if (!$args['walker']) {
    $args['walker'] = new Roots_Nav_Walker();
  }
  return $args;
}

Lecția învățată aici este să verifici ÎNTOTDEAUNA dacă un plugin sau, în acest caz, un hook al framework-ului temei, nu modifică ceva. Sper că acest lucru va ajuta pe cineva care folosește tema Roots și încearcă să creeze meniuri multi-nivel.

11 mar. 2012 10:22:49
Comentarii

Doar o notă, ai putea să creezi un child theme sau să folosești Roots pentru a nu suprascrie funcțiile de bază în cazul în care actualizezi tema.

Brooke. Brooke.
11 mar. 2012 11:32:18

Un sfat excelent, mulțumesc. Totuși, cred că tema nu va fi actualizată.

Dwayne Charrington Dwayne Charrington
11 mar. 2012 12:46:31
0

Dacă există un meniu mai profund în HTML, dar nu apare la hover, adăugați acest cod în fișierul CSS:

.dropdown-menu li:hover a+ul {
     display: block;
     top: 80%; // opțional
}
9 ian. 2014 11:20:24