从wp_NAV_MENU()标记中删除容器元素

时间:2015-09-12 作者:me_digvijay

我尝试了几种选择,如设置\'container\' => false 并注册theme_location 并在论坛上搜索,但我无法摆脱页面中wp\\U nav\\U菜单中的“div”:

<?php get_nav_menu();?>

function get_nav_menu() {
    $navMenuDefaults = array(
    \'theme_location\'  => \'header-nav\',
    \'menu\'            => \'\',
    \'container\'       => false,
    \'container_class\' => \'\',
    \'container_id\'    => \'\',
    \'menu_class\'      => \'\',
    \'menu_id\'         => \'\',
    \'echo\'            => true,
    \'fallback_cb\'     => \'wp_page_menu\',
    \'before\'          => \'\',
    \'after\'           => \'\',
    \'link_before\'     => \'\',
    \'link_after\'      => \'\',
    \'items_wrap\'      => \'<ul id="%1$s" class="%2$s">%3$s</ul>\',
    \'depth\'           => 0,
    \'walker\'          => \'\'
);
    return wp_nav_menu($navMenuDefaults);
}
和在函数中。php:

function register_top_nav() {
  register_nav_menu(\'header-nav\',__( \'Header Nav\' ));
}
add_action( \'init\', \'register_top_nav\' );
我不确定为什么会得到以下输出:

<div class="">
    <ul>
        <li class="page_item page-item-2">
            <a href="url">Sample Page</a>
        </li>
    </ul>
</div>
如何获得以下内容:

<ul class="abc">
    <li>
        <a href="#">dfdf</a>
    </li>
</ul>
谢谢。

6 个回复
SO网友:MD MUSA

仅供参考:container => \'\' 是字符串操作,默认设置为div 您不能使用true or false like bool expression.

只需更改container => \'ul\' 那么我希望你能得到你想要的东西。有关更多详细信息,请阅读以下内容:https://developer.wordpress.org/reference/functions/wp_nav_menu/

谢谢你

SO网友:bosco

问题

您没有created a menu on the Appearance > Menus panel in the WordPress admin dashboard.

我的推理基于以下情况下发生的错误:

尚未创建导航菜单wp_nav_menu() 使用默认值调用\'fallback_cb\' 论点\'wp_page_menu\'

  • wp_nav_menu() 用一个\'container\' 参数旨在消除容器(任何the empty() function 退货true 对于)溶液,下列任一项应去除<div> 容器

    在中创建菜单Appearance > Menus 面板无关的<div> 即使您没有将新菜单与注册的\'header-nav\' 主题位置\'fallback_cb\' 一个自定义函数的参数,该函数返回一些默认标记,甚至是一个空字符串,即。

    \'fallback_cb\' => function() { return \'\'; },
    
    如果wp_nav_menu() 函数找不到所指示的菜单,然后尝试另外两种方法来生成菜单标记:

    显示找到的第一个填充菜单\'fallback_cb\' 参数(默认情况下,wp_page_menu()).

  • 您发布的标记用于page 帖子ID为的帖子类型2 标题“示例页”,可能表示新的WordPress安装,可以合理地假设没有创建菜单。这表明您的wp_nav_menu() 电话可能会退回到wp_page_menu(), 因为回退功能将从安装中的任意数量的页面创建临时菜单。

    \'fallback_cb\' 调用函数时,将向其传递与给定的参数相同的参数wp_nav_menu() (与默认参数合并)。这里是关于wp_page_menu() 函数有点过时,因为从WordPress 4.4.0开始,函数实际上接受并处理\'container\' 论点所以wp_page_menu() 是用同样的\'container\' 你交给的论点wp_nav_menu(), 那就是\'\' (空字符串文字)或false.

    问题的实质是一种自相矛盾的行为these lines 在里面wp_page_menu():

    // Fallback in case `wp_nav_menu()` was called without a container.
    if ( empty( $container ) ) {
        $container = \'div\';
    }
    
    所以,自从empty() 计算两个布尔值false 以及\'\'true, 这个小小的故障保险箱认为你不想要一个容器太疯狂了,于是又为你加了一个。

    SO网友:Aftab

    是的,您可以使用此代码

    $nav_menu = array(
           \'title_li\'        => \'\', 
           \'container\'       => \'\',
           \'theme_location\'  => \'header-nav\',   
            \'menu_class\'     => \'\',
            \'menu_id\'        => \'\',
    );                    
    
    wp_nav_menu( $nav_menu );
    
    上述代码将以ul和li格式显示菜单,而不具有ul和li标签的任何类别和id

    SO网友:MD MUSA

    您可以尝试此方案。

    Step 1:

    将此代码放入主题functions.php 文件:

    add_action( \'after_setup_theme\', \'theme_nav_setup\' );
    
    if ( ! function_exists( \'theme_nav_setup\' ) ){
      function theme_nav_setup() {  
        register_nav_menu( \'header-nav_new\', __( \'Main Menu\', \'text-domain\' ) );
      }
    }
    

    Step 2:

    然后在可以看到此菜单输出的地方调用此选项:

    wp_nav_menu( array(
      \'menu\' => \'header-nav_new\',
      \'theme_location\'    => \'header-nav_new\',
      \'depth\'             => 6,
      \'container\'         => \'ul\',
      \'fallback_cb\'       => \'wp_page_menu\',
      \'menu_class\'        => \'abc\'
     )
    );
    

    SO网友:Muntasir Mahmud Aumio

    当您将“container”设置为false时,除非环境中的任何地方存在bug或与其他内容发生冲突,否则这应该可以正常工作。

    事实上,我已经在2015年和我的一个主题之前的主题中对此进行了测试。

    您是否可以检查是否有任何内部缓存不能立即反映您的更改?

    谢谢

    SO网友:Pakpoom Tiwakornkit

    根据我自己的经验,如果您还没有将菜单分配到注册的菜单位置,那么所有参数设置都以container 行不通。在看到更改之前,必须将创建的菜单分配到注册的菜单位置。

    相关推荐

    无法将设置添加到“NAV_MENUS”定制器面板

    我试图在自定义程序的“菜单”面板中添加一个复选框,但由于某些原因,它没有显示出来。如果我尝试将其从“nav\\u菜单”更改为“title\\u tagline”或“colors”,复选框会显示得很好。是什么阻止它显示在“菜单”面板上?// add custom options to the Customizer function nssra_customizer_options($wp_customize) { // add \"menu primary flex\" checkb