WP_NAV_MENU()未将类和ID正确应用于菜单和容器

时间:2018-03-08 作者:Aerendir

我写了这个简单的代码来证明我所说的:

wp_nav_menu( [
    \'menu\' => \'Primary Navigation\',
    \'menu_class\' => \'this-is-the-menu-class\',
    \'menu_id\' => \'this-is-the-menu-id\',
    \'container\' => \'div\',
    \'container_class\' => \'this-is-the-container-class\',
    \'container_id\' => \'this-is-the-container-ID\',
] );
这是输出:

<div id="this-is-the-menu-id" class="this-is-the-menu-class">
    <ul>
        <li class="page_item page-item-2">
            <a href="http://localhost/test_site/index.php/pagina-di-esempio/">Example Page.</a>
        </li>
    </ul>
</div>

As you can see the ul element doesn\'t receive any class nor ID.

They, instead, are applied to the container and the container classes and ID seem to be simply missed (or getting the default values).

在文件中被告知

用于构成菜单的ul元素的“menu\\u class”(字符串)CSS类。默认“菜单”

But as you can see the result is not the one expected.

在里面this discussion 用户设置错误container param,所以回复指出了这个错误,但这个错误仍然存在,我正在遵循规则(至少我认为是这样!)。

Am I doing something wrong or effectively the function is bugged?

备注:

我正在使用Genesis框架(以防理解上下文可能有用)

  • Wordpress版本是4.9.4
  • 2 个回复
    最合适的回答,由SO网友:sMyles 整理而成

    我相信这可能是由于你的主题或其他插件,过滤wp_nav_menu_args 以及更改items_wrap 价值我使用空白WordPress 4.9.4安装测试了您提供的代码,输出是正确的。

    你可以试着传球items_wrap 使用默认值:

    wp_nav_menu( [
        \'menu\' => \'Primary Navigation\',
        \'menu_class\' => \'this-is-the-menu-class\',
        \'menu_id\' => \'this-is-the-menu-id\',
        \'container\' => \'div\',
        \'container_class\' => \'this-is-the-container-class\',
        \'container_id\' => \'this-is-the-container-ID\',
        \'items_wrap\' => \'<ul id="%1$s" class="%2$s">%3$s</ul>\'
    ] );
    
    但如果有什么东西过滤掉了,那也没什么区别。

    我建议将此添加到子主题的函数中。php文件,删除所有过滤器并查看是否修复了它(以证明它是导致问题的过滤器):

    remove_all_filters( \'wp_nav_menu_args\' );
    
    您还可以将其添加到子主题的函数中。php,要在屏幕上转储$args 数组,您可以在其中检查items_wrap:

    add_filter( \'pre_wp_nav_menu\', \'smyles_dump_nav_menu_args\', 9999, 2 );
    
    function smyles_dump_nav_menu_args( $null, $args ){
        ob_start();
    
        echo \'<pre>\';
        var_dump($args);
        echo \'</pre>\';
    
        $content = ob_get_contents();
        ob_end_clean();
        return $content;
    }
    
    如果将真值(在我们的示例中,它是HTML)返回到此过滤器,则会导致它在页面上回显echowp_nav_menu

    确保添加echo 和设置true 在里面wp_nav_menu 电话:

    wp_nav_menu( [
        \'menu\' => \'Primary Navigation\',
        \'menu_class\' => \'this-is-the-menu-class\',
        \'menu_id\' => \'this-is-the-menu-id\',
        \'container\' => \'div\',
        \'container_class\' => \'this-is-the-container-class\',
        \'container_id\' => \'this-is-the-container-ID\',
        \'echo\' => true
    ] );
    

    SO网友:user173315

    我遇到了同样的问题,并得出结论,这是因为我没有在wordpress管理面板中创建菜单。

    你要做的是create a menu 在“管理”面板中,并使用该菜单查找您在代码中创建的菜单。

    结束