Як видалити UL на wp_nav_menu?


19

Я шукав на цьому сайті і знайшов багато відповідей на це питання. Більшість із них не працює над моєю темою.

Ось одне рішення, яке я знайшов, і воно працює відповідно до моєї потреби.

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для встановлення атрибута класу та / або ідентифікатора в UL.

Я хочу використовувати рибку. menu_classіmenu_id лише у тому випадку, якщо меню активовано. Якщо меню не існує menu_classі menu_idне є, <ul>але як <div>. ось чому занадто багато запитань щодо wp_nav_menu()вас може це перевірити :)
хаха

Відповіді:


11

Функція wp_nav_menu приймає аргумент dropback_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? Тому що поки що повернення порожнє.
хаха

Тепер зрозуміло :) Дякую, Брюг, אתרים. До речі, як я вимовляю ваше прізвисько? Мояha ha
ха-ха

LOL, рада, що ти йдеш.
Bainternet

Я запитав те саме, я вважаю, що це єврейська мова, який би був точний переклад, з цікавості .. :)
t31os

:) так це іврит та його нік я підхопив деякий час, що при правильному перекладі означає щось на кшталт "веб-дизайн".
Bainternet

58

Власне, 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>.
Джордж Димитріадіс

Це правда налаштовується у WordPress за замовчуванням. Спасибі!
Абдалла Арбаб

найкраща відповідь, не потрібно
Еман

це не працює для мене в 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'`


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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.