是否自定义导航漫游以显示当前分支的同级和子项?

时间:2013-01-31 作者:gregthegeek

我在谷歌上看到过与此非常相似(如果不是精确的话)的查询,但似乎总是找不到我需要的东西。我正在尝试使用模板中的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祖先()会得到一个空数组。

谢谢你的帮助!格雷格

1 个回复
SO网友:gregthegeek

嗯,虽然我更喜欢有自己的助行器并控制导航,但我发现了一个插件,它可以完全满足我的需要:高级菜单小部件http://wordpress.org/extend/plugins/advanced-menu-widget/

只进行了轻微的测试,但其工作方式与我预期的一样,只需在菜单小部件配置中选择“仅严格相关的子菜单”。我应该注意到,对于像我这样的主题开发新手来说,我曾经尝试过这个插件,但不知道如何配置它。(找不到小部件配置)嗯,这只是因为我的主题还没有启用侧栏,因此没有小部件!

无论如何,我不喜欢依赖插件来创建我的主题导航,但它工作得很好,我不必构建它。:)问题已解决。

结束

相关推荐

Menus like a CMS

以下是一些内容的结构示例:Parent A -- Child A -- Child B Parent B -- Child C -- Child D Parent A 应链接到的内容Child A 和Parent B 应链接到的内容Child C. 除此之外,我不确定这是否应该完全由wordpress中的“菜单”来管理,或者它是否应该是Parent A 包含子页面的页面。唯一的问题是Parent A 不是真正的内容,只是链接到Child A.如果你需要一个真