给WordPress主题添加子菜单

3

我想在我的主题中添加WordPress菜单的子菜单。我想使用WordPress 3.0的wp_nav_menu函数。换句话说,我想看到子菜单而不是子页面,这意味着wp_list_pages不是正确的函数,因为我想要子菜单而不是子页面。

假设菜单结构如下:

  • 首页
  • 条目1
    • 条目3
    • 条目4
  • 条目2
    • 条目5
    • 条目6

如果有人点击条目1(并将其作为父项),则主题只显示此条目的子菜单。对于条目1,它是:

  • 条目3
  • 条目4

我知道有这样的代码:

<?php 
    $children = ($post->post_parent) ? wp_list_pages('title_li=&child_of='.$post->post_parent.'&echo=0') : wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0'); 
    if($children) { echo('<ul>'.$children.'</ul>'); } 
 ?> 

然而,我的重点是谈论菜单结构,而不是页面结构。哦,并且深度参数无效,因为它表示“到这里”而不是“从这里”。 我认为可以通过自定义 walker 解决,但我不知道如何实现。
wp_nav_menu 的函数参考 http://codex.wordpress.org/Template_Tags/wp_nav_menu 我已经寻找了很长时间的解决方法,请帮帮我。非常感谢。

你找到解决方案了吗?我也遇到了同样的问题。 - Bajlo
3个回答

0

这应该会有所帮助:http://www.svennerberg.com/2009/02/creating-a-submenu-in-wordpress/

<?php
$has_subpages = false;
// Check to see if the current page has any subpages
$children = wp_list_pages('&child_of='.$post->ID.'&echo=0');
if($children) {
    $has_subpages = true;
}
// Reseting $children
$children = "";

// Fetching the right thing depending on if we're on a subpage or on a parent page (that has subpages)
if(is_page() && $post->post_parent) {
    // This is a subpage
    $children = wp_list_pages("title_li=&include=".$post->post_parent ."&echo=0");
    $children .= wp_list_pages("title_li=&child_of=".$post->post_parent ."&echo=0");
} else if($has_subpages) {
    // This is a parent page that have subpages
    $children = wp_list_pages("title_li=&include=".$post->ID ."&echo=0");
    $children .= wp_list_pages("title_li=&child_of=".$post->ID ."&echo=0");
}
?>
<?php // Check to see if we have anything to output ?>
<?php if ($children) { ?>
<ul class="submenu">
    <?php echo $children; ?>
</ul>
<?php } ?>

谢谢您的帮助,但这不是我要找的,因为代码显示了子页面,但没有显示子导航。 - dominik

0
为了使其正常工作,我必须在页面加载时隐藏.sub-menu。然后,通过定位“.current_page_item .sub-menu”仅显示相关的子菜单。
$(document).ready(function() {
        $(".sub-menu").hide(); // hide the submenu on page load
    $(".current_page_item .sub-menu").show();
)};

不错的想法,用js来做而不是在服务器上。虽然不完全是我想要的,但可以工作。在有人提出另一个解决方案之前,我接受这个解决方案;-) - dominik

0
一个解决方案是在页面上放置另一个wp_nav_menu函数,并修改CSS以隐藏非活动菜单项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接