Wie entferne ich UL im wp_nav_menu?

18

Ich habe auf dieser Site gesucht und viele Antworten auf diese Frage gefunden. Die meisten von ihnen arbeiten nicht an meinem Thema.

Hier ist eine Lösung, die ich gefunden habe und die meinen Bedürfnissen entspricht.

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

Dieser Code wird ulam Anfang und am Ende von entfernt wp_nav_menu(). Also schreibe ich einfach in mein Thema

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>

Aber das Problem tritt erneut auf, wenn ich kein Menü über den Administrator hinzufüge oder aktiviere. http://domain.com/wp-admin/nav-menus.php

Frage:

Wie entferne ich das <div><ul>**</ul></div>ob das Menü aktiv ist oder nicht. Gib mir Bescheid


Endlich habe ich es geschafft :) functions.php

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'default_page_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function default_page_menu() {
   wp_list_pages('title_li=');
} 

header.php

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>
Haha
quelle
Warum möchten Sie das UL entfernen, wenn Sie es trotzdem erneut hinzufügen? Mit den Parametern menu_classund können Sie menu_ideine Klasse und / oder ein ID-Attribut für den UL festlegen.
Ich möchte Superfish verwenden. menu_classund menu_idfunktionieren nur, wenn das Menü aktiviert ist. Wenn das Menü nicht existiert menu_classund menu_idnicht als <ul>aber als ist <div>. das ist, warum zu viele Fragen über wp_nav_menu()Sie es testen können :)
haha

Antworten:

11

Die Funktion wp_nav_menu akzeptiert ein Argument von fallback_cb. Dies ist der Name der Funktion, die ausgeführt werden soll, wenn das Menü nicht vorhanden ist. Also ändere deinen Code in so etwas wie:

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'fall_back_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function fall_back_menu(){
    return;
}

Sie können den Container sogar aus dem Menü entfernen und andere Aufgaben mit weiteren Argumenten ausführen, die an die Funktion wp_nav_menu gesendet wurden

Hoffe das hilft.

Bainternet
quelle
@ בניית אתרים - Danke für deine Erklärung. Aber ich werde hier unscharf. Laut dem Hinweis auf nav-menu-template.php fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. Set to false for no fallbackWas soll ich ersetzen, um die wp_nav_menu_no_ul()Arbeit zu machen , wenn ich falsch auf das setze fallback_cb? Weil es vorerst leer ist.
Haha
Jetzt verstanden :) Vielen Dank בניית אתרים. Übrigens, wie spreche ich deinen Spitznamen aus? Meinsha ha
haha
LOL, ich bin froh, dass du es machst.
Bainternet
Ich habe mich das selbe gefragt, ich nehme an, es ist Hebräisch, was aus Neugier eine genaue Übersetzung wäre. :)
t31os
:) ja, es ist hebräisch und es ist ein Spitzname, den ich eine Weile aufgegriffen habe.
Bainternet
57

Eigentlich unterstützt WordPress dies standardmäßig:

wp_nav_menu(array(
    'items_wrap' => '%3$s'
));

Die Standardeinstellung für items_wrapist <ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>.

Martti Laine
quelle
3
Das ist die richtige Antwort. Die anderen Antworten für ein programmgesteuertes Suchen und Ersetzen zum Entfernen <ul>nach dem Hinzufügen sind nur rückwärts
mikemike
'container' => falsewenn Sie die Verpackung <div>auch loswerden möchten .
George Dimitriadis
Es ist in WordPress standardmäßig richtig konfigurierbar. Vielen Dank!
Abdalla Arbab
Beste Antwort, keine Notwendigkeit für Hack
Eman
Dies funktioniert nicht für mich in
WP
3

Wenn Sie nur <a>Tags drucken möchten , können Sie folgendermaßen vorgehen:

$primaryMenu = array(
    'theme_location'  => 'primary',
    'menu'            => '',
    'container'       => '',
    'container_class' => false,
    'container_id'    => '',
    'menu_class'      => 'menu',
    'menu_id'         => 'primary-menu',
    'echo'            => false,
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'depth'           => 0,
    'walker'          => ''
);
echo strip_tags( wp_nav_menu( $primaryMenu ), '<a>' );
Pavlo Zamoroka
quelle
Diese Arbeit ist perfekt für mich. Das Setzen von "items_wrap" => "% 3 $ s" hat in
WP
2

Für mich funktionierte Folgendes:

<?php wp_nav_menu( array(
       'container' => '',
       'items_wrap' => '%3$s' 
) ); ?>

Ich hoffe es hilft.

Umlaufendes Pixel
quelle