问题描述
我正在制作我的第一个自定义步行者来构建手风琴菜单。首先我用这个例子:http://bitacre.com/2025/custom-nav-menu-walker-for-wordpress-themes
有两个功能。先用 start_lvl 然后 start_el 。
在 start_el 中,ID 由 $ item-> ID 实现。有人知道如何在 start_lvl 中做到这一点吗?我需要提供 (周围的较低级别的导航)ID,所以我可以触发它在手风琴菜单中折叠。
我想要生成的是这样的:
<a href="#collapse2">Titel 2</a>
<ul id="collapse2">Lower Level Menu 2</ul>
<a href="#collapse3">Titel 3</a>
<ul id="collapse3">Lower Level Menu 3</ul>
我的代码为 start_lvl 功能:
// add id's and classes to ul sub-menus
function start_lvl( &$output, $depth, $item ) {
// depth dependent classes
$indent = ( $depth > 0 ? str_repeat( "t", $depth ) : '' ); // code indent
$display_depth = ( $depth + 1); // because it counts the first submenu as 0
$pgid = ; // How to get ID in here??
$classes = array(
'sub-menu',
( $display_depth == 1 ? 'accordion-body collapse' : '' ),
( $display_depth % 2 ? 'menu-odd' : 'menu-even' ),
( $display_depth >=2 ? 'sub-sub-menu' : '' ),
'menu-depth-' . $display_depth
);
$ids = array(
'collapse' . $pgid
);
$class_names = implode( ' ', $classes );
$id_name = implode( ' ', $ids );
// build html
$output .= "n" . $indent . '<ul id="' . $id_name . '" class="' . $class_names . '">' . "n";
}
最佳解决方案
我只是在我的一个主题中做到这一点… 由于您在 Walker 的这个阶段无法访问 $ item 变量,所以您希望将当前项目存储在更全面的范围内确实有权访问它。以下代码将更有意义… 注意:除了相关代码之外,我已经删除了一切。
class ThemeTruck_Nav_Walker extends Walker_Nav_Menu {
private $curItem;
// retrieve the curItem
function start_lvl(&$output, $depth = 0, $args = array()) {
var_dump($this->curItem );
}
// store the curItem
function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
$this->curItem = $item;
}
}
次佳解决方案
我有一个类似的问题,并通过在类中使用静态变量来解决它:
static protected $menu_lvl;
然后在”display_element” 中,我增加了变量:
self::$menu_lvl++;
在我的代码中,我在 start_lvl 函数中引用了这样的东西:
$output .= "<ul id='level". self::$menu_lvl ."'>";
这不使用页面 ID,但它使用可由 JavaScript 引用的 UL 语句的唯一 ID 。
BTW – 这对于嵌套的手风琴非常有用,或者使用 Bootstrap 为移动应用程序使用 Roots 主题中的可点击的嵌套下拉列表。
第三种解决方案
您可以在 start_el
功能中使用以下过滤器,并在 start_lvl
功能中使用以下过滤器。
apply_filters( 'walker_nav_menu_start_lvl', $item_output, $item, $depth, $args->myarg=$item->title );
请让我知道,如果它的作品。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。