列出子页面,除非不存在,在这种情况下,列出兄弟页面,在WordPress中

时间:2013-08-22 17:48:02

标签: php wordpress

我有这样的导航结构:

  • 主页
  • 关于
    • 团队
    • 我们的使命
  • 位置
    • 芝加哥
    • 纽约
    • 洛杉矶
  • 服务
  • 联系我们

如果我正在查看“关于”页面,我希望侧边栏显示:

  • 团队
  • 我们的使命

如果我正在查看“服务”页面,我希望侧边栏显示:

  • 主页
  • 关于
  • 位置
  • 服务
  • 联系我们

这是我目前正在使用的代码。如何修改它以使其按照我想要的方式工作?

<?php
    global $wp_query;
    if( empty($wp_query->post->post_parent) ) {
        $parent = $wp_query->post->ID;
    } else {
        $parent = $wp_query->post->post_parent;
    }
    $children = get_pages('child_of='.$parent);
    if( count( $children ) > 0 ) {
?>
    <ul>
        <?php wp_list_pages ("&title_li=&child_of=$parent"); ?>
    </ul>
<?php } ?>

1 个答案:

答案 0 :(得分:2)

这应该是彻底的,或者至少告诉你如何:

  

当查看具有子项(或是孩子)的页面时,它仅显示该父项的子项。

     
      
  • 访问主页时,所有顶级页面都会在侧栏中列出。
  •   
  • 访问没有孩子的顶级页面时,会列出所有顶级页面。
  •   
  • 访问包含子项的顶级页面时,仅列出子页面和后代页面。
  •   
  • 访问子页面时,仅列出该父页面的子页面和后代页面。
  •   
<?php
$output = wp_list_pages('echo=0&depth=1&title_li=<h2>Top Level Pages </h2>' );
if (is_page( )) {
  $page = $post->ID;
  if ($post->post_parent) {
    $page = $post->post_parent;
  }
  $children=wp_list_pages( 'echo=0&child_of=' . $page . '&title_li=' );
  if ($children) {
    $output = wp_list_pages ('echo=0&child_of=' . $page . '&title_li=<h2>Child Pages</h2>');
  }
}
echo $output;
?>

来自:http://codex.wordpress.org/Function_Reference/wp_list_pages#List_subpages_even_if_on_a_subpage

此方法利用echo=0参数,该参数将结果作为字符串返回给变量。 if ($children)测试现在有效,因为wp_list_pages()如果找不到匹配项将返回空。