web-dev-qa-db-de.com

Containerelement aus wp_nav_menu () Markup entfernen

Ich habe verschiedene Optionen ausprobiert, wie das Setzen von 'container' => false und das Registrieren des theme_location und das Durchsuchen von Foren, aber ich kann das "div", das mit dem wp_nav_menu auf meiner Seite kommt, nicht entfernen:

<?php get_nav_menu();?>

function get_nav_menu() {
    $navMenuDefaults = array(
    'theme_location'  => 'header-nav',
    'menu'            => '',
    'container'       => false,
    'container_class' => '',
    'container_id'    => '',
    'menu_class'      => '',
    'menu_id'         => '',
    'echo'            => true,
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'items_wrap'      => '<ul id="%1$s" class="%2$s">%3$s</ul>',
    'depth'           => 0,
    'walker'          => ''
);
    return wp_nav_menu($navMenuDefaults);
}

und in functions.php:

function register_top_nav() {
  register_nav_menu('header-nav',__( 'Header Nav' ));
}
add_action( 'init', 'register_top_nav' );

Ich bin nicht sicher, warum ich die folgende Ausgabe erhalte:

<div class="">
    <ul>
        <li class="page_item page-item-2">
            <a href="url">Sample Page</a>
        </li>
    </ul>
</div>

Wie kann ich etwas wie folgendes bekommen:

<ul class="abc">
    <li>
        <a href="#">dfdf</a>
    </li>
</ul>

vielen Dank.

4
me_digvijay

Zu Ihrer Information: container => '' ist eine Zeichenfolgenoperation und wird standardmäßig durch div festgelegt. Sie können true or false like bool expression nicht verwenden.

Ändern Sie einfach den container => 'ul', dann hoffe ich, dass Sie das bekommen, was Sie sehen möchten. Weitere Informationen finden Sie hier: https://developer.wordpress.org/reference/functions/wp_nav_menu/

Danke Musa

3
MD MUSA

Problem

Sie haben kein Menü im Appearance > Menus-Panel im WordPress-Admin-Dashboard erstellt .

Meine Argumentation basiert auf einem Fehler, der unter den folgenden Bedingungen auftritt:

  • Es wurden keine Navigationsmenüs erstellt
  • wp_nav_menu() wurde mit dem Standardargument 'fallback_cb''wp_page_menu' aufgerufen
  • wp_nav_menu() wurde mit einem 'container'-Argument aufgerufen, um den Container zu entfernen (alles, wofür die Funktion empty()true zurückgibt)

Lösungen

Eine der folgenden Möglichkeiten sollte den Container <div> entfernen.

  • Erstellen Sie ein Menü im Bereich Appearance > Menus. Der überflüssige <div> sollte verschwinden, auch wenn Sie das neue Menü nicht mit Ihrem registrierten 'header-nav'-Themenverzeichnis verknüpfen.
  • Ändern Sie das Argument 'fallback_cb' in eine benutzerdefinierte Funktion, die ein Standard-Markup zurückgibt - oder sogar eine leere Zeichenfolge - d. H.

    'fallback_cb' => function() { return ''; },
    

Erläuterung

Falls die Funktion wp_nav_menu() das angegebene Menü nicht finden kann, versucht sie zwei weitere Dinge, um eine Menümarkierung zu erzeugen:

  1. Zeigen Sie das erste gefundene aufgefüllte Menü an.
  2. Menü-Markup anzeigen, das von der durch das Argument 'fallback_cb' angegebenen Funktion generiert wurde (standardmäßig wp_page_menu() ).

Ihr veröffentlichtes Markup bezieht sich auf eine page Beitragsart mit der Beitrags-ID 2 und dem Titel "Beispielseite", was möglicherweise auf eine neue WordPress-Installation hinweist, für die es vernünftig wäre, anzunehmen, dass keine Menüs erstellt wurden. Dies deutet darauf hin, dass Ihr wp_nav_menu()-Aufruf wahrscheinlich auf wp_page_menu() zurückgeht, da die Fallback-Funktion aus einer beliebigen Anzahl von Seiten in Ihrer Installation ein spontanes Menü erstellt.

Wenn die Funktion 'fallback_cb' aufgerufen wird, werden die gleichen Argumente übergeben, die auch für wp_nav_menu() angegeben wurden (zusammengeführt mit Standardargumenten). Hier ist die Codex-Dokumentation zur Funktion wp_page_menu() etwas veraltet, da die Funktion ab WordPress 4.4.0 tatsächlich ein Argument 'container' akzeptiert und verarbeitet. Daher wird wp_page_menu() mit demselben 'container'-Argument aufgerufen, das Sie an wp_nav_menu() übergeben haben, nämlich '' (leeres String-Literal) oder false.

Die Ursache des Problems ist ein widersprüchliches Verhalten, das sich aus diesen Zeilen in wp_page_menu() ergibt:

// Fallback in case `wp_nav_menu()` was called without a container.
if ( empty( $container ) ) {
    $container = 'div';
}

Da also empty() sowohl die boolesche false als auch den '' zu true auswertet, denkt dieser kleine Fail-Safe, dass Sie verrückt danach sind, keinen Container zu wollen, und fügt einen zurück in "für" Sie.

1
bosco

Sie können es mit diesem Szenario versuchen.

Schritt 1:

Fügen Sie diesen Code in die functions.php-Datei Ihres Themas ein:

add_action( 'after_setup_theme', 'theme_nav_setup' );

if ( ! function_exists( 'theme_nav_setup' ) ){
  function theme_nav_setup() {  
    register_nav_menu( 'header-nav_new', __( 'Main Menu', 'text-domain' ) );
  }
}

Schritt 2:

Rufen Sie dies dann auf, wo Sie diese Menüausgabe sehen können:

wp_nav_menu( array(
  'menu' => 'header-nav_new',
  'theme_location'    => 'header-nav_new',
  'depth'             => 6,
  'container'         => 'ul',
  'fallback_cb'       => 'wp_page_menu',
  'menu_class'        => 'abc'
 )
);
0
MD MUSA

Wenn Sie der registrierten Menüposition noch kein Menü zugewiesen haben, funktionieren nach meiner Erfahrung alle Argumenteinstellungen mit dem Präfix container nicht. Sie müssen Ihr erstelltes Menü dem registrierten Menüpunkt zuordnen, bevor Sie die Änderung sehen können.

0

Ja, Sie können diesen Code verwenden

$nav_menu = array(
       'title_li'        => '', 
       'container'       => '',
       'theme_location'  => 'header-nav',   
        'menu_class'     => '',
        'menu_id'        => '',
);                    

wp_nav_menu( $nav_menu );

Der obige Code zeigt das Menü im ul- und li-Format an, ohne dass für ul- und li-Tag eine Klasse und eine ID angegeben wurden

0
Aftab

Wenn Sie "container" auf "false" setzen, sollte dies funktionieren, es sei denn, irgendwo in der Umgebung ist ein Fehler aufgetreten oder es liegt ein Konflikt mit etwas anderem vor.

Tatsächlich habe ich das in Twenty Fifteen und einem von My themeforest Themes getestet.

Können Sie überprüfen, ob Sie einen internen Cache haben, der Ihre Änderungen nicht sofort widerspiegelt?

Vielen Dank