如何访问WordPress Nav_Walker中元素的菜单ID

时间:2018-08-23 作者:Dean

以此代码为例(来自另一篇文章):

class Primary_Walker_Nav_Menu extends Walker_Nav_Menu {

    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        if ( array_search( \'menu-item-has-children\', $item->classes ) ) {
            $output .= sprintf( "\\n<li class=\'dropdown %s\'><a href=\'%s\' class=\\"dropdown-toggle\\" data-toggle=\\"dropdown\\" >%s</a>\\n", ( array_search( \'current-menu-item\', $item->classes ) || array_search( \'current-page-parent\', $item->classes ) ) ? \'active\' : \'\', $item->url, $item->title );
        } else {
            $output .= sprintf( "\\n<li %s><a href=\'%s\'>%s</a>\\n", ( array_search( \'current-menu-item\', $item->classes) ) ? \' class="active"\' : \'\', $item->url, $item->title );
        }
    }

    function start_lvl( &$output, $depth = 0, $args = array()) {
        $indent = str_repeat( "\\t", $depth );
        $output .= "\\n$indent<ul class=\\"dropdown-menu\\" role=\\"menu\\">\\n";
    }
}
如果菜单id, 在该菜单的HTML中呈现的是foobar-nav 我希望在渲染时能够访问此值<li> 按照<li class="menu-foobar-nav-menu-item">.

我看了很久$item 变量来查看它包含的内容,但唯一吸引我注意的是$item->menu_item_parent 在本例中设置为0 而且毫无用处。

我还查看了我能够覆盖的其他函数,看看是否可以在早期访问菜单id,并将其值设置为在渲染元素时可以访问的类属性,但我在那里找不到任何有趣的内容。

E、 g最终输出可能是这样的:

<ul id="foobar-nav">
  <li class="menu-foobar-nav-menu-item">Some menu item</li>
</ul>

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

如果您将ID传递给wp_nav_menu() 像这样:

wp_nav_menu( array(
    \'menu_id\' => \'foobar-nav\',
) );
然后您可以通过$args 参数:

function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    $menu_id = $args[\'menu_id\'];
}

结束

相关推荐

Custom Menus and taxonomies

好的,我刚开始使用WordPress,不是很好,我有一个菜单问题,我真的需要一些帮助。我在一个网站上工作,它有多个地点,并非所有地点都销售相同的产品。所有位置都是具有父结构的页面。俄亥俄州-联系我们-关于我们-产品等。。。西弗吉尼亚州-联系我们-关于我们-产品等。。。宾夕法尼亚州-联系我们-关于我们-产品等我掌握了自定义页面模板的窍门,并为其添加了自定义菜单(因此,我所有的Ohio页面都使用了我制作的自定义Ohio模板,并包含了自定义Ohio菜单)。我正在使用帖子创建产品信息页面,并使用以下方式显示它们: