如何删除wp_nav_menu上的UL?


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_classmenu_id参数在UL上设置类和/或id属性。

我要用超级鱼。menu_class并且menu_id只有在菜单被激活的情况下才有效。如果菜单不存在menu_classmenu_id并且不是as <ul>而是as <div>。那就是为什么关于wp_nav_menu()您的太多问题可能会对其进行测试:)
哈哈

Answers:


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?因为它现在返回空白。
哈哈

现在理解:)非常感谢בנייתאתרים。顺便说一句,我怎么发音你的昵称?矿山ha ha
哈哈

大声笑,很高兴你去。
Bainternet,2011年

我想知道同一件事,我想是希伯来语,出于好奇,这将是准确的翻译.. :)
t31os 2011年

:)是的,它是希伯来语和它的昵称。
Bainternet 2011年

57

实际上,WordPress默认情况下支持此功能:

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

的默认items_wrap值为<ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>


3
这是正确的答案。<ul>在添加

'container' => false如果您也想摆脱包装<div>
乔治·迪米特里亚迪斯

默认情况下,它在WordPress中是真正可配置的。谢谢!
Abdalla Arbab

最佳答案,无需黑客
Eman

这在wp 5.2中对我
不起作用


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'`

2

对我来说,这是可行的:

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

希望能帮助到你。


0

我知道这个问题并不完全是这个问题的答案,但是有很多人知道如何在WordPress中删除ul和li标签,并在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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.