ฉันจะลบ UL บน wp_nav_menu ได้อย่างไร


18

ฉันค้นหาในเว็บไซต์นี้และพบคำตอบมากมายสำหรับคำถามนี้ ส่วนใหญ่ไม่ได้ทำงานกับธีมของฉัน

นี่คือทางออกหนึ่งที่ฉันพบและใช้งานได้ตามความต้องการของฉัน

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

}

รหัสนี้จะเอาที่จุดเริ่มต้นและจุดสิ้นสุดของul wp_nav_menu()ดังนั้นในชุดรูปแบบของฉันฉันเพิ่งเขียน

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

แต่ปัญหาจะมาอีกครั้งเมื่อฉันไม่เพิ่มหรือเปิดใช้งานเมนูใด ๆ ผ่านทางผู้ดูแลระบบ http://domain.com/wp-admin/nav-menus.php

คำถาม:

ฉันจะลบเมนูได้<div><ul>**</ul></div>อย่างไรว่าใช้งานได้หรือไม่ แจ้งให้เราทราบ


ในที่สุดฉันก็ทำให้มันทำงาน :) 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>

ทำไมคุณต้องการลบ UL เมื่อคุณเพิ่มเข้าไปอีกครั้ง? คุณสามารถใช้พารามิเตอร์menu_classและmenu_idเพื่อตั้งค่าคลาสและ / หรือแอตทริบิวต์ id บน UL

ฉันต้องการใช้ superfish menu_classและmenu_idจะใช้งานได้เมื่อเปิดใช้งานเมนูเท่านั้น หากเมนูไม่มีอยู่menu_classและmenu_idไม่เป็น<ul>เช่น<div>นั้น thats ทำไมคำถามมากเกินไปเกี่ยวกับwp_nav_menu()คุณอาจทดสอบ :)
ฮ่าฮ่า

คำตอบ:


11

ฟังก์ชั่น wp_nav_menu รับอาร์กิวเมนต์ของ fallback_cb ซึ่งเป็นชื่อของฟังก์ชั่นที่จะเรียกใช้หากไม่มีเมนู ดังนั้นเปลี่ยนรหัสของคุณเป็นแบบนี้:

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

คุณสามารถลบคอนเทนเนอร์ออกจากเมนูและทำสิ่งอื่น ๆ ด้วยอาร์กิวเมนต์เพิ่มเติมที่ส่งไปยังฟังก์ชัน wp_nav_menu

หวังว่านี่จะช่วยได้


@ בנייתאתרים - ขอบคุณสำหรับคำอธิบายของคุณ แต่ฉันเริ่มเบลอที่นี่ ตามหมายเหตุเกี่ยวกับ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 fallbackสิ่งที่ฉันควรเปลี่ยนเพื่อให้wp_nav_menu_no_ul()ทำงานถ้าฉันตั้งค่าเท็จกับfallback_cb? เพราะมันกลับมาว่างเปล่าตอนนี้
ฮ่าฮ่า

เข้าใจแล้ว :) ขอบคุณมากבנייתאתרים BTW ฉันจะออกเสียงชื่อเล่นของคุณได้อย่างไร? Mineha ha
ฮ่าฮ่า

ฮ่า ๆ ดีใจที่คุณไป
Bainternet

ฉันสงสัยในสิ่งเดียวกันมันเป็นภาษาฮิบรูฉันถือว่าสิ่งที่จะแปลที่ถูกต้องออกมาจากความอยากรู้อยากเห็น .. :)
t31os

:) ใช่แล้วฮีบรูและนิคมันเป็นเรื่องที่ฉันเลือกได้ซักพักถ้าแปลอย่างถูกต้องแปลว่า "การออกแบบเว็บ"
Bainternet

57

ที่จริงแล้ว WordPress รองรับสิ่งนี้ตามค่าเริ่มต้น:

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

ค่าเริ่มต้นสำหรับมีitems_wrap<ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>


3
นี่คือคำตอบที่ถูกต้อง คำตอบอื่น ๆ ของการทำโปรแกรมค้นหา & แทนที่เพื่อลบ<ul>หลังจากที่มันถูกเพิ่มไปแล้วเป็นเพียงแค่ย้อนหลัง
mikemike

'container' => falseถ้าคุณต้องการกำจัดสิ่งห่อหุ้ม<div>เช่นกัน
George Dimitriadis

มันเป็นความจริงที่สามารถกำหนดค่าได้ใน WordPress โดยค่าเริ่มต้น ขอบคุณ!
Abdalla Arbab

คำตอบที่ดีที่สุด, ไม่จำเป็นต้องแฮ็ค
Eman

นี้ไม่ทำงานสำหรับฉันใน WP 5.2
rafaelphp


4

หากคุณต้องการพิมพ์เฉพาะ<a>แท็กคุณอาจไปทางนี้:

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

งานนี้สมบูรณ์แบบสำหรับฉันการตั้งค่าเฉพาะ '' items_wrap '=>'% 3 $ s '' ไม่มีผลใน WP 5.2
rafaelphp


0

ฉันรู้ว่าคำตอบนี้ไม่สมบูรณ์สำหรับคำถามนี้ แต่มีคนจำนวนมากที่รู้วิธีลบแท็ก ul และ li ใน WordPress และเพิ่มแท็กอื่นใน WordPress

เช่นเดียวกับก่อนที่จะใช้รหัสของฉัน WordPress ให้ผลลัพธ์ประเภทนี้ในเมนู

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

แต่บางคนต้องการเปลี่ยน ul เป็น div และ li เป็นแท็กคุณควรใช้โค้ดด้านล่าง

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

สิ่งนี้ให้เอาต์พุตในรูปแบบต่อไปนี้

<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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.