我在谷歌上看到过与此非常相似(如果不是精确的话)的查询,但似乎总是找不到我需要的东西。我正在尝试使用模板中的wp\\u nav\\u菜单创建完整的垂直菜单。只有我想只显示当前分支、兄弟姐妹和他们的孩子。有点像手风琴风格的菜单。我更喜欢在PHP中这样做,而不是使用CSS或JQuery。
完整菜单示例:
- Home
- Products
- Cool Item 1
- Item 1 Details
- Item 1 Gallery
- Cool Item 2
- Item 2 Details
- Item 2 Gallery
- Services
- Svc 1
- Svc 2
例如,如果我在当前项目“Cool item 1”上,我想查看所有根菜单项、所有产品,但只查看“Cool item 1”的子项,不查看“Cool item 2”或任何服务的子项。如下所示:
- Home
- Products
- Cool Item 1 (-current page-)
- Item 1 Details
- Item 1 Gallery
- Cool Item 2
- Services
如果单击“服务”,我想看到:
- Home
- Products
- Services (-current page-)
- Svc 1
- Svc 2
目前,在我的自定义walker中,我有如下star\\u el方法:(make\\u menu\\u item是搜索walker时看到的典型菜单显示)
function start_el(&$output, $item, $depth, $args) {
// am I on the current Item?
if($item->current_item_ancestor or $item->current_item_parent or $item->current){
$cur_branch = true;
}
// this works for all current branch items, but not siblings or children
if( $cur_branch || $depth == 0 ) {
$output .= $this->make_menu_item($item, $depth, $args);
} else {
// need to know if my parents are in current branch, then OK to show children
// not sure how to do that from this point?
if($item->menu_item_parent && $depth > 0) {
// this currently shows everything, not what I want
// if this is removed, no children objects show, even under cur_branch
$output .= $this->make_menu_item($item, $depth, $args);
}
}
}
我知道这种逻辑可能不是最好的,但这只是一个开始。我可以很容易地判断我是否在菜单的“当前分支”中,并且我在display\\u elements方法中设置了$item->haschilders,但是haschilders对当前的子级没有任何好处。如果我现在知道父对象是否在当前分支中,那将非常有用,因为我可以显示菜单项,也可以不显示菜单项,这就是我想要的。
我可以执行SQL查询,但我确实不愿意这样做。是否有方法获取walker阵列中的父级信息和可用对象($项目或$元素?)?也许我把这一切都搞错了?似乎应该很容易获取父信息,但在这里调用get\\u祖先()会得到一个空数组。
谢谢你的帮助!格雷格