Php 如何在wordpress中创建包含父母、子女和兄弟姐妹的页面列表,但仅限于某些情况?

Php 如何在wordpress中创建包含父母、子女和兄弟姐妹的页面列表,但仅限于某些情况?,php,wordpress,Php,Wordpress,我正在尝试创建一个侧栏导航菜单,它会根据站点中的当前位置进行更改 以下是导航的整体外观: 家 关于我们 1a级 1b级 1c级 节目 1d级 2a级 2b级 1e级 2c级 2d级 一楼 联系我们 目前,我正在使用自定义导航菜单为主页创建菜单,以便他们可以通过管理面板中的菜单链接编辑自定义菜单。他们不希望联系人页面上有侧栏导航菜单 在“关于我们”页面上,他们希望侧栏导航如下所示: 1a级 1b级 1c级 在“程序”页面上,他们希望它看起来像这样: 1d级 1e级 一楼

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

以下是导航的整体外观:

  • 关于我们
    • 1a级
    • 1b级
    • 1c级
  • 节目
    • 1d级
      • 2a级
      • 2b级
    • 1e级
      • 2c级
      • 2d级
    • 一楼
  • 联系我们
目前,我正在使用自定义导航菜单为主页创建菜单,以便他们可以通过管理面板中的菜单链接编辑自定义菜单。他们不希望联系人页面上有侧栏导航菜单

在“关于我们”页面上,他们希望侧栏导航如下所示:

  • 1a级
  • 1b级
  • 1c级
在“程序”页面上,他们希望它看起来像这样:

  • 1d级
  • 1e级
  • 一楼
当在Level 1d页面上时,他们希望该页面如下所示:

  • 1d级
    • 2a级
    • 2b级
  • 1e级
  • 一楼
确保仅显示当前父级的子页面

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

  • 1d级
    • 2a级
    • 2b级
  • 1e级
  • 一楼
还需要注意的是,我需要能够为当前页面列表项设置不同于其他项的样式,因此每次都需要向该列表项添加某种类型的当前页面项类

到目前为止,我还无法在级别1d上仅打印当前父级的子级。wp_列表_页面允许您设置深度,但不限于当前父级。它还打印所有兄弟姐妹的子级(即,如果在级别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块中的所有代码,因为它无法正常工作。

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

<?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将自动添加一个类
。当前菜单项
。您只需要从CSS自定义该类


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

以下是我想到的代码:

    <?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;?>


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

这并不能完全回答我的问题……我在这里的需求非常具体,需要以不同的方式显示第二和第三级的子页面。此代码不适用于此。