Buggy wp_nav_menu?

时间:2012-06-16 作者:Charliechocolate

我希望有人能给我一些线索。我在一个网站上工作,它有一个三级菜单,加载调用三个不同的wp菜单(比如“主菜单”、“项目子菜单”、“二级项目子菜单”,其中“项目子菜单”是类别,“二级项目子菜单”是“项目子菜单”中一个类别的子类别)。但在wp添加当前菜单类指向错误的菜单项。这是指,在访问其子菜单时,它没有激活相应的“项目”项菜单,而是激活了错误的菜单项“新闻”,将类当前菜单项错误地添加到其中。

我已经检查了管理面板上的wp菜单好几次,也删除并重新构建了它们,但似乎没有什么可以解决这个问题。

以下是指向临时站点的链接:http://bruto.se/wp/proyectos/equipamientos/

加载菜单的代码示例:

<?php get_header(); ?>

<?php wp_nav_menu( array(\'menu\' => \'proyectos\' )); ?>


<?php
if ( is_category_or_sub(4) ) {
wp_nav_menu( array(\'menu\' => \'proyectos-2level\' ));
}
else {}
?>
屏幕截图:

http://min.us/mbjE27te3W

1 个回复
SO网友:Stephen Harris

出于某种原因(原因尚不完全清楚)。新闻页面被视为类别页面的父级。这里有点不对劲——因为代码中的菜单、子菜单和子菜单都是独立的实体,页面“新闻”和类别通常没有任何关系。类似地,您的页面及其子菜单(包括类别)不应显示任何关系。我希望看到的是,当打开equipamientos时,第一个菜单中没有突出显示任何内容。

解决方案我无法解决上述问题,但我可以建议一种替代方法。只有一个菜单-包含所有所需的层,但将其与自定义walker一起使用,以便只显示其中的一部分。例如,考虑以下菜单:

enter image description here

当启用“A”时,如果要查看A-D并且只查看A的子级。当启用“CatA1”时,我们要查看A-D、CatA1、CatA2和A1的子类别。同样,在CatB1上,我们希望看到A-D和CatB1。

自定义Walker

在自定义Walker术语中,当我们遍历菜单时,我们只想查看顶层(没有父菜单项),然后只想查看作为当前项(及其子项)祖先的项,最后是当前项及其子项。

这就是自定义walker类背后的逻辑:

class SH_Hideable_Sub_Nav_Walker extends Walker_Nav_Menu {  

    var $trail=array();

    // Only follow down the current branch  
    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {  

    $is_child_of_ancestor = in_array($element->menu_item_parent, $this->trail);

    // If not top level and not current item, an ancestor of current item or  a child of an ancestor - stop here.
    if ( 0 != $element->menu_item_parent && !$element->current && !$element->current_item_ancestor && !$is_child_of_ancestor)  
            return;

    if( $element->current || $element->current_item_ancestor )
        $this->trail[] = (int) $element->ID;

        parent::display_element( $element, &$children_elements, $max_depth, $depth, $args, &$output );  
    }  
}
HTML标记的输出将与主题当前生成的内容略有不同,因此您需要使用适当的CSS样式,使其符合您的需要。

当在CatA1的子类别上时,输出示例:

<div class="menu-primary-container">
   <ul id="menu-primary" class="menu">

      <li id="menu-item-2704" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-ancestor current_page_ancestor menu-item-2704">
         <a href="http://localhost/wordpress33/a/">A</a>

         <ul class="sub-menu">
            <li id="menu-item-2705" class="menu-item menu-item-type-taxonomy menu-item-object-category current-category-ancestor current-menu-ancestor current-menu-parent current-category-parent menu-item-2705">
               <a href="http://localhost/wordpress33/category/cata1/">CatA1</a>

               <ul class="sub-menu">
                  <li id="menu-item-2706" class="menu-item menu-item-type-taxonomy menu-item-object-category current-menu-item menu-item-2706">
                     <a href="http://localhost/wordpress33/category/cata1/subcat-of-cata1/">Subcat of CatA1</a>
                  </li>
               </ul>

            </li>
            <li id="menu-item-2707" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-2707">
               <a href="http://localhost/wordpress33/category/cata2/">CatA2</a>
            </li>
         </ul>

      </li>

      <li id="menu-item-2703" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2703">
         <a href="http://localhost/wordpress33/b/">B</a><ul class="sub-menu"></ul>
      </li>

      <li id="menu-item-2702" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2702">
         <a href="http://localhost/wordpress33/c/">C</a>
      </li>

      <li id="menu-item-2701" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2701">
         <a href="http://localhost/wordpress33/d/">D</a>
      </li>
</ul>

结束