出于某种原因(原因尚不完全清楚)。新闻页面被视为类别页面的父级。这里有点不对劲——因为代码中的菜单、子菜单和子菜单都是独立的实体,页面“新闻”和类别通常没有任何关系。类似地,您的页面及其子菜单(包括类别)不应显示任何关系。我希望看到的是,当打开equipamientos时,第一个菜单中没有突出显示任何内容。
解决方案我无法解决上述问题,但我可以建议一种替代方法。只有一个菜单-包含所有所需的层,但将其与自定义walker一起使用,以便只显示其中的一部分。例如,考虑以下菜单:
当启用“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>