以此代码为例(来自另一篇文章):
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>
最合适的回答,由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\'];
}