Wp_nav_menu'da UL'yi nasıl kaldırırım?


19

Bu sitede arama yapıyorum ve bu soru için birçok cevap buldum . Çoğu benim temam üzerinde çalışmıyor.

İşte bulduğum tek bir çözüm ve ihtiyacım doğrultusunda çalışıyor.

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

}

Bu kod ulbaşında ve sonunda kaldırılacak wp_nav_menu(). Bu yüzden temamda sadece yazıyorum

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

Ancak yönetici üzerinden herhangi bir menü eklemediğimde veya etkinleştirmediğimde sorun tekrar geliyor. http://domain.com/wp-admin/nav-menus.php

Soru:

<div><ul>**</ul></div>Menünün etkin olup olmadığını nasıl kaldırabilirim ? Bilmeme izin ver


Sonunda çalıştım :) 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>

Yine de tekrar eklediğinizde neden UL'yi çıkarmak istiyorsunuz? UL'de bir sınıf ve / veya id niteliği ayarlamak için menu_classve menu_idparametrelerini kullanabilirsiniz .

Süper balık kullanmak istiyorum. menu_classve menu_idyalnızca menü etkinleştirildiyse çalışır. Menü mevcut değilse menu_classve menu_idolduğu gibi <ul>değil <div>. bu yüzden wp_nav_menu()senin hakkında çok fazla soru test edebilirsiniz :)
haha

Yanıtlar:


11

Wp_nav_menu işlevi, menü yoksa çalıştırılacak işlevin adı olan fallback_cb argümanını alır. kodunuzu aşağıdaki gibi değiştirin:

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

kapsayıcıyı menüden kaldırabilir ve wp_nav_menu işlevine gönderilen daha fazla bağımsız değişkenle başka şeyler yapabilirsiniz

Bu yardımcı olur umarım.


@ בניית אתרים - Açıklamanız için teşekkürler. Ama burada bulanıklaşıyorum. 'A yanlış ayarladıysam çalışabilmek için 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 fallbackneyi değiştirmeliyim ? Çünkü şimdilik boş dönüyor. wp_nav_menu_no_ul()fallback_cb
haha

Şimdi anlaşıldı :) Çok teşekkürler בניית אתרים. BTW, takma adınızı nasıl telaffuz ederim? Mineha ha
haha

LOL, gitmene sevindim.
Bainternet

Aynı şeyi merak ettim, sanırım İbranice, doğru bir çeviri ne olurdu,
meraktan

:) evet o İbranice ve onun bir süre i düzgün bir şekilde tercüme "web tasarım" gibi bir şey anlamına bir gitmek aldı bir nick aldı.
Bainternet

58

Aslında, WordPress bunu varsayılan olarak destekler:

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

İçin varsayılan items_wrapDİR <ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>.


3
Bu doğru cevap. <ul>Zaten eklendikten sonra kaldırmak için programlı bir bul ve değiştir yapmanın diğer cevapları sadece geriye
mikemike

'container' => falsesargıdan kurtulmak istiyorsanız <div>.
George Dimitriadis

WordPress'te varsayılan olarak doğru yapılandırılabilir. Teşekkürler!
Abdalla Arbab

en iyi cevap, kesmek gerek yok
Eman

Bu wp 5.2 benim için çalışmıyor
rafaelphp


4

Yalnızca <a>etiketleri yazdırmak istiyorsanız, şu şekilde gidebilirsiniz:

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

Bu iş benim için mükemmel, sadece `` items_wrap '=>'% 3 $ s ''
ayarının

2

Benim için işe yarayan şuydu:

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

Umarım yardımcı olur.


0

Bu cevabın tamamen bu soru için olmadığını biliyorum, ancak WordPress'te ul ve li etiketini nasıl kaldıracağını ve WordPress'e başka bir etiket ekleyeceğini bilen birçok insan var.

Kodumu uygulamadan önce WordPress menüde bu tür çıktılar veriyor

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

Ama birisi ul'yi div ve li'yi bir etikete dönüştürmek istiyorsa aşağıdaki kodu kullanmalısınız

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

Bu, çıktıyı aşağıdaki biçimde verir

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.