1

我正在尝试创建一个侧边栏导航菜单,该菜单会根据站点中的当前位置进行更改。

这是导航的整体外观:

  • 关于我们
    • 1a级
    • 1b级
    • 1c级
  • 程式
    • 1d 级
      • 2a 级
      • 2b级
    • 1e级
      • 2c级
      • 2d 级
    • 1f级
  • 联系我们

目前我正在使用自定义导航菜单为主页创建菜单,以便他们可以通过管理面板中的菜单链接编辑自定义菜单。他们不希望在联系页面上有侧边栏导航菜单。

在关于我们的页面上,他们希望侧边栏导航看起来像这样:

  • 1a级
  • 1b级
  • 1c级

在“程序”页面上,他们希望它看起来像这样:

  • 1d 级
  • 1e级
  • 1f级

在 Level 1d 页面上时,他们希望它看起来像这样:

  • 1d 级
    • 2a 级
    • 2b级
  • 1e级
  • 1f级

确保子页面仅显示当前父页面。

在 2a 级页面上时,他们希望它看起来与在 1d 级页面上一样:

  • 1d 级
    • 2a 级
    • 2b级
  • 1e级
  • 1f级

另外需要注意的是,我需要能够以不同于其他项目的方式设置当前页面列表项的样式,因此需要将某种当前页面项类添加到每个列表项中时间。

到目前为止,我无法在 Level 1d 上仅打印当前父级的子级。wp_list_pages 允许您设置深度,但不限于仅当前父级。它也打印所有兄弟姐妹的孩子(即,如果在第 1d 级上,它会打印他们各自父母下的所有第 2 级孩子,而不是仅在当前活动的父母下的第 2 级孩子)。

我该怎么做?

    <?php $current_section = "";
        if(is_front_page()):
             $current_section = "home";
             $nav_args = array(
                 'theme_location' => $current_section,
                  'container' => 'nav',
                  'container_class' => 'side-nav'
             );
             wp_nav_menu( $nav_args );
        else:

        endif;?>

这就是我目前所拥有的。我已经删除了 else 块中的所有代码,因为它无论如何都不起作用。

4

2 回答 2

0

尝试以下代码仅显示当前父级及其子菜单

<?php
  if($post->post_parent) {
  $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
  $titlenamer = get_the_title($post->post_parent);
  }

  else {
  $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
  $titlenamer = get_the_title($post->ID);
  }
  if ($children) { ?>

  <h2> <?php echo $titlenamer; ?> </h2>
  <ul>
  <?php echo $children; ?>
  </ul>

<?php } ?>

法典的这一部分解释了这一点

另外需要注意的是,我需要能够以不同于其他项目的方式设置当前页面列表项的样式,因此需要将某种当前页面项类添加到每个列表项中时间。

不需要每次都写一个特殊的类。WordPress 会自动添加一个类.current-menu-item。您只需要从 CSS 自定义该类。

希望这能解决你的一些问题.. :)

于 2012-08-17T16:59:27.223 回答
0

这是我想出的代码:

    <?php
            $children = wp_list_pages('depth=1&title_li=&child_of='.$post->ID.'&echo=0');
            $current_page = wp_list_pages('title_li=&include='.$post->ID.'&echo=0');
            $grandparent=0;
            if($post->post_parent):
                $parent = wp_list_pages('title_li=&include='.$post->post_parent.'&echo=0');
                $siblings = wp_list_pages('depth=1&title_li=&child_of='.$post->post_parent.'&exclude='.$post->ID.'&echo=0');
                $parent_children = wp_list_pages('depth=1&title_li=&child_of='.$post->post_parent.'&echo=0');
                $parent_post = get_post($post->post_parent);
                $grandparent = $parent_post->post_parent;
                $parent_siblings = wp_list_pages('depth=1&title_li=&child_of='.$grandparent.'&echo=0&exclude='.$post->post_parent);
            endif;
            if(!$post->post_parent && $children):?>
                <ul class="menu">
                    <?php echo $children;?>
                </ul>
            <?php elseif($post->post_parent && $children):?>
                <ul class="menu">
                    <?php echo $current_page;?>
                    <ul class="menu">
                        <?php echo $children;?>
                    </ul>
                    <?php echo $siblings;?>
                </ul>
            <?php elseif($grandparent && $post->post_parent && !$children):?>
                <ul class="menu">
                    <?php echo $parent;?>
                    <ul class="menu">
                    <?php echo $parent_children;?>
                    </ul>
                    <?php echo $parent_siblings;?>
                </ul>
            <?php elseif(!$grandparent && $post->post_parent && !$children):?>
                <ul class="menu">
                    <?php echo $parent_children;?>
                </ul>
            <?php endif;?>

这不是有史以来最优雅的解决方案,但至少它符合我的要求。唯一可以改进其实际功能的是保持菜单项的顺序,同时仍然允许子菜单。此代码删除带有子菜单的菜单项并将其移动到顶部。我想不出任何其他方法来做到这一点。

于 2012-08-20T14:27:40.127 回答