it-swarm.com.de

Warum funktioniert die Funktion 'wp_nav_menu' nur, bis ein Menü erstellt wird?

Ich versuche ein Theme für WordPress zu erstellen, also habe ich eine Neuinstallation durchgeführt. Ich habe keine Einträge, Seiten oder Menüs erstellt.

An dieser Stelle bin ich gerade dabei, das Menü zu erstellen, also habe ich in meiner Datei functions.php die folgende Funktion erstellt:

<?php register_nav_menus( array(
  'menu' => 'Menu superior',)); ?>

Und um es in meinem header.php zu implementieren, habe ich es so implementiert:

<!-- Menu -->
<nav id="menu">  
    <h2>Menu</h2>      
    <?php wp_nav_menu(array(
    'container' => false, 
    'items_wrap' => '<ul> %3$s</ul>', 
    'theme_location' => 'menu', 
    )); ?>
</nav>

Beim Ausführen wurde mir klar, dass die Elemente, die mir hinzugefügt werden, nicht den gewünschten Stil haben. Bei diesen Elementen handelt es sich um die Seiten, die erstellt wurden. In diesem Fall handelt es sich um die Seiten, die in der Installation generiert wurden sieht aus wie das:  Sin menu creado manualmente 

Dann ging ich zum Menüabschnitt und erstellte einen manuell, indem ich Elemente hinzufügte. Mir ist aufgefallen, dass das Menü wie gewünscht angezeigt wird:

 enter image description here 

Die Frage hier ist, ob ich mein Thema Benutzern zur Verfügung stelle, die eine saubere Installation von WordPress haben und dennoch kein Menü erstellen, dann wird mein Menü ohne Design angezeigt, wenn der Container div zum Menü hinzugefügt wird. Und die Seiten, die bis zu diesem Moment erstellt wurden, würden hinzugefügt, aber ohne Stil. Müsste ich denjenigen, die es erwerben, mitteilen, dass sie zuerst ein Menü erstellen müssen, damit der Stil angewendet werden kann? Oder können Sie eine Form machen, damit Sie von Anfang an richtig mit dem Stil sehen können?

Ich schätze Ihre Hilfe! (Eine Entschuldigung, ich musste einen Übersetzer benutzen)

SOLUTION

Ich habe es wie folgt gelöst:

    <!-- Menu -->
    <nav id="menu">  
        <h2>Menu</h2>      
        <?php 
        if ( has_nav_menu( 'menu' ) ) {
            wp_nav_menu(array(
                'container' => false, 
                'items_wrap' => '<ul> %3$s</ul>', 
                'theme_location' => 'menu', 
                ));
        }else{
            echo "<ul>";
            wp_list_pages('title_li=');
            echo "</ul>";
        }
        ?>
    </nav>

Wie von Milo erwähnt, musste ich überprüfen, ob das Menü noch nicht existiert, um eine bestimmte Aktion auszuführen.

1
Gibrán

Dies liegt am wp_nav_menu parameter fallback_cb:

Ist das Menü nicht vorhanden, wird eine Rückruffunktion ausgelöst. Standard ist 'wp_page_menu'. Für No Fallback auf false setzen.

Sie haben keine Alternative angegeben, daher wird die Standardeinstellung wp_page_menu verwendet.

Sie können Ihre eigene Funktion erstellen, um ein Seitenmenü mit dem richtigen Markup anzuzeigen, oder den Parameter fallback_cb auf false setzen und nichts anzeigen.

has_nav_menu kann auch hilfreich sein, um alternative Markups anzuzeigen, wenn ein Menü nicht verfügbar ist.

1
Milo