Làm cách nào để xóa UL trên wp_nav_menu?


18

Tôi tìm kiếm trên trang web này và tìm thấy nhiều câu trả lời cho câu hỏi này. Hầu hết trong số họ không làm việc theo chủ đề của tôi.

Đây là một giải pháp tôi tìm thấy và nó hoạt động theo nhu cầu của tôi.

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

}

Mã này sẽ loại bỏ ulở đầu và cuối wp_nav_menu(). Vì vậy, trong chủ đề của tôi, tôi chỉ viết

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

Nhưng vấn đề lại xuất hiện khi tôi không thêm hoặc kích hoạt bất kỳ menu nào thông qua quản trị viên. http://domain.com/wp-admin/nav-menus.php

Câu hỏi:

Làm cách nào để xóa <div><ul>**</ul></div>menu có hoạt động hay không. Cho tôi biết


Cuối cùng tôi đã làm cho nó hoạt động :) 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>

Tại sao bạn muốn loại bỏ UL khi bạn thêm nó một lần nữa? Bạn có thể sử dụng các tham số menu_classmenu_idđể đặt thuộc tính lớp và / hoặc id trên UL.

Tôi muốn sử dụng siêu cá. menu_classmenu_idchỉ hoạt động nếu menu được kích hoạt. Nếu menu không tồn tại menu_classmenu_idkhông phải là <ul>nhưng như <div>. đó là lý do tại sao quá nhiều câu hỏi về wp_nav_menu()bạn có thể kiểm tra nó :)
haha

Câu trả lời:


11

Hàm wp_nav_menu lấy một đối số của fallback_cb là tên của hàm để chạy nếu menu không tồn tại. Vì vậy, thay đổi mã của bạn thành một cái gì đó như thế này:

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

thậm chí bạn có thể xóa vùng chứa khỏi menu và thực hiện các công việc khác với một số đối số khác được gửi đến hàm wp_nav_menu

Hi vọng điêu nay co ich.


@ בנ - Cảm ơn lời giải thích của bạn. Nhưng tôi đang bị mờ ở đây. Theo ghi chú trên 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 fallbackTôi nên thay thế gì để làm wp_nav_menu_no_ul()việc nếu tôi đặt sai thành fallback_cb? Bởi vì nó trả lại trống cho bây giờ.
haha

Bây giờ đã hiểu :) Cảm ơn rất nhiều בנ BTW, làm thế nào để tôi phát âm biệt danh của bạn? Của tôiha ha
haha

LOL, rất vui khi bạn đi nó.
Bai Internet

Tôi đã tự hỏi điều tương tự, đó là tiếng Do Thái tôi giả sử, đâu sẽ là một bản dịch chính xác, vì tò mò .. :)
t31os

:) vâng, tiếng Do Thái và một nick tôi đã chọn một lúc mà nếu dịch đúng nghĩa là "thiết kế web".
Bai Internet

57

Trên thực tế, WordPress hỗ trợ điều này theo mặc định:

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

Mặc định cho items_wrap<ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>.


3
Đây là câu trả lời chính xác. Các câu trả lời khác của việc thực hiện tìm kiếm & thay thế theo chương trình để xóa <ul>sau khi đã được thêm vào chỉ là ngược
mikemike 20/03/2015

'container' => falsenếu bạn muốn thoát khỏi gói <div>là tốt.
George Dimitriadis

Nó là cấu hình thực sự trong WordPress theo mặc định. Cảm ơn!
Abdalla Arbab

Câu trả lời hay nhất, không cần hack
Eman

điều này không hiệu quả với tôi trong wp 5.2
rafaelphp


3

Nếu bạn chỉ muốn in <a>các thẻ, bạn có thể đi theo cách này:

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

công việc này hoàn hảo đối với tôi, chỉ thiết lập `'items_wrap' => '% 3 $
s'`

2

Đối với tôi những gì đã làm việc này là:

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

Hy vọng nó giúp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.