De ce wp_nav_menu() nu afișează meniul corespunzător atunci când este invocat de două ori consecutiv? (WordPress, Dezvoltarea Temei, Meniuri)

versvs a intrebat.

Tocmai am observat ceva ciudat pe care nu l-am mai văzut până acum. Lucrez la un proiect care folosește WP 3.6.1. Acest proiect care are două meniuri diferite (de fapt, trei, dar asta nu e important). Eu le chem prin intermediul wp_nav_menu function.

Am făcut acest tip de lucru de câteva ori până acum… dar astăzi este diferit. Astăzi nu funcționează 🙁

Codul meu PHP, plasat în header.php, arată așa:

        <nav id="nav-menu-container">
            <div id="main-menu" class="main-menu menu clearfix">
                <?php wp_nav_menu('header_main'); ?>
            </div>
            <div id="secondary-menu" class="secondary-menu menu clearfix">
                <?php wp_nav_menu('header_secondary'); ?>
            </div>
        </nav>

Elementele de meniu sunt declarate în functions.php și două meniuri diferite sunt configurate prin tabloul de bord pentru a apărea în fiecare locație.

    if (function_exists('register_nav_menus')){
        register_nav_menu('header_main', 'Menú principal' );
        register_nav_menu('header_secondary', 'Menú secundario' );
    }

Dar primul meniu continuă să fie tipărit în cele două locații. Așa cum am spus mai sus, utilizarea a două meniuri diferite este ceva ce am făcut în trecut, dar astăzi nu văd eroarea… și acolo este și eroare, deoarece nu funcționează :S

Aveți vreo idee?

2 răspunsuri
Chip Bennett

Nu apelați wp_nav_menu() corect.

Trebuie să-i treci o matrice args și să declari theme_location cheie.

Presupun că, din moment ce treceți un șir de caractere și nu o matrice, wp_nav_menu() nu recunoaște parametrul și revine la ieșirea implicită:

  • meniul care corespunde ID-ului, slug-ului sau numelui dat de parametrul menu, dacă meniul respectiv are cel puțin un element;
  • în caz contrar, primul meniu care nu este gol;
  • în caz contrar, rezultatul funcției date de parametrul fallback_cb (wp_page_menu(), în mod implicit);
  • în caz contrar, nimic.

Și vedeți primul meniu care nu este gol ieșire în ambele locații.

Încearcă asta în schimb:

wp_nav_menu( array(
    'theme_location' => 'header_main'
) ):

și

wp_nav_menu( array(
    'theme_location' => 'header_secondary'
) ):

Comentarii

  • Mulțumesc, am adăugat un răspuns, am găsit problema 🙂 mulțumesc @chip –  > Por versvs.
versvs

Problema este că wp_nav_menu cere ca intrare o matrice asociativă, iar eu introduc un șir brut.

Acest cod poate funcționa peste tot.

    <nav id="nav-menu-container">
        <div id="main-menu" class="main-menu menu clearfix">
    <?php wp_nav_menu( array('theme_location' => 'header_main') ); ?>
        </div>
        <div id="secondary-menu" class="secondary-menu menu clearfix">
            <?php wp_nav_menu( array('theme_location' => 'header_secondary') ); ?>
        </div>
    </nav>

Îmi cer scuze pentru dubla postare. Se pare că nici primul meniu nu apărea, mai degrabă era afișat ca opțiune implicită, deoarece nu era trecută nicio valoare.