Jak usunąć UL z wp_nav_menu?


19

Przeszukuję tę stronę i znalazłem wiele odpowiedzi na to pytanie. Większość z nich nie działa na mój temat.

Oto jedno rozwiązanie, które znalazłem i działa zgodnie z moimi potrzebami.

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);

}

Ten kod zostanie usunięty ulna początku i na końcu wp_nav_menu(). Więc w moim temacie po prostu piszę

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

Ale problem pojawia się ponownie, gdy nie dodam ani nie aktywuję żadnego menu przez administratora. http://domain.com/wp-admin/nav-menus.php

Pytanie:

Jak usunąć, <div><ul>**</ul></div>czy menu jest aktywne, czy nie. Daj mi znać


W końcu udało mi się to :) 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>

Dlaczego mimo to chcesz usunąć UL, gdy dodajesz go ponownie? Możesz użyć parametrów menu_classi menu_id, aby ustawić atrybut klasy i / lub id na UL.

Chcę użyć superfisha. menu_classi menu_iddziała tylko wtedy, gdy menu jest aktywne. Jeśli menu nie istnieje menu_classi menu_idnie jest tak, <ul>ale jak <div>. dlatego zbyt wiele pytań na wp_nav_menu()twój temat możesz to przetestować :)
— haha

Odpowiedzi:


11

Funkcja wp_nav_menu przyjmuje argument fallback_cb, który jest nazwą funkcji do uruchomienia, jeśli menu nie istnieje. więc zmień kod na coś takiego:

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;
}

możesz nawet usunąć kontener z menu i robić inne rzeczy z kilkoma argumentami wysłanymi do funkcji wp_nav_menu

Mam nadzieję że to pomoże.


@ בניית אתרים - Dziękujemy za wyjaśnienie. Ale tutaj się zacieram. Zgodnie z uwagą na temat 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 fallbackCo powinienem wymienić, aby wp_nav_menu_no_ul()działał, jeśli ustawiłem wartość false na fallback_cb? Ponieważ na razie zwraca puste.
— haha

Teraz zrozumiane :) Wielkie dzięki בניית אתרים. BTW, jak wymówić twój pseudonim? Mójha ha
— haha

LOL, cieszę się, że idziesz.
— Bainternet

Zastanawiałem się nad tym samym, zakładam, że to hebrajski, co byłoby dokładnym tłumaczeniem, z ciekawości .. :)
— t31os

:) tak, to hebrajski i to nicka, które wziąłem pod uwagę, że jeśli odpowiednio przetłumaczone oznacza coś w stylu „projektowanie stron internetowych”.
— Bainternet

58

W rzeczywistości WordPress domyślnie obsługuje to:

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

Domyślne ustawienie items_wrapto <ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>.


3
To jest poprawna odpowiedź. Inne odpowiedzi na temat automatycznego wyszukiwania i zamiany w celu usunięcia <ul>po jego dodaniu są tylko wstecz
— mikemike,

'container' => falsejeśli chcesz również pozbyć się opakowania <div>.
— George Dimitriadis,

Domyślnie można go konfigurować w WordPress. Dzięki!
— Abdalla Arbab

najlepsza odpowiedź, nie trzeba hakować
— Eman

to nie działa dla mnie w
— WP


4

Jeśli chcesz wydrukować tylko <a>tagi, możesz przejść w ten sposób:

$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>' );

ta praca jest idealna dla mnie, ustawienie tylko `` items_wrap '=>'% 3 $ s '' nie ma wpływu na wp 5.2
— rafaelphp

2

Dla mnie zadziałało to:

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

Mam nadzieję, że to pomoże.


0

Wiem, że ta odpowiedź nie jest całkowicie na to pytanie, ale jest tak wiele osób, które wiedzą, jak usunąć tag ul i li w WordPress i dodać kolejny tag w WordPress.

Podobnie jak przed zastosowaniem mojego kodu WordPress daje tego rodzaju dane wyjściowe w menu

<ul class="*****"><li>abc</li></ul>

Ale ktoś chce zmienić ul na div, a li na tag, powinieneś użyć poniższego kodu

            <?php

                $menuParameters = array(
                    'menu' => 'primary_menu',
                    'link_before'     => '<span>',
                    'link_after'      => '</span>',
                    'before'        => '<div class="tp-primary-header mui-top-home">',
                    'after'     => '</div>',
                    'container'       => false,
                    'echo'            => false,
                    'depth'           => 0,
                );

                echo strip_tags(wp_nav_menu( $menuParameters ), '<a><span><div>' );
                ?>

Daje to wynik w następującym formacie

<div class="tp-primary-header mui-top-home"><a href="#"><span>ABC</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>def</span></a></div>
<div class="tp-primary-header mui-top-home"><a href="#"><span>XYZ</span></a></div>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.