如何在循环中循环(显示孩子,然后是孙子)

时间:2012-06-03 17:10:04

标签: wordpress

我正在尝试为WordPress开发一个查询,这将允许我显示仅包含标题的子页面列表,然后在每个子页面标题下,显示grandchilden(子项的子项)页面标题及其内容的列表

例如,输出应该是这样的:

<ul>
  <li>
    <h1>Page 1</h1>
    <ul>
      <li>
        <h2>Child Page 1</h2>
      </li>
      <li>
        <h2>Child Page 2</h2>
        <ul>
          <li>
            <h3>Grandchild</h3>
            <p>Hello, welcome to this grandchild page</p>
          </li>
          <li>
            <h3>Grandchild #2</h3>
            <p>Hello, welcome to this grandchild page</p>
          </li>
        </ul>
      </li>
      <li>
        <h2>Child Page 3</h2>
      </li>
    </ul>
  </li>
  <li>
    <h1>Page 2</h1>
  </li>
</ul>

需要动态完成,这意味着我不想将帖子ID号指定为查询的一部分。

我尝试过使用标准的WordPress查询,然后在第一个查询中嵌套第二个查询 - 这次失败。

此外,我还尝试修改此处显示的代码:http://wordpress.org/support/topic/query-child-pages-of-a-current-page-and-loop-through-each-child-page

最后,我还尝试修改此代码:

<?php if ( have_posts() ) {  while ( have_posts() ) { the_post(); $thispage=$post->ID; }} ?>
<?php $childpages = query_posts('post_per_page=3&orderby=menu_order&order=asc&post_type=' . get_post_type( $post->ID ) . '&post_parent='.$thispage);
    if($childpages){ /* display the children content  */
            foreach ($childpages as $post) :
            setup_postdata($post); ?>
          <li><a class="" href="#<?php echo($post->post_name) ?>">
            <?php the_title(); ?>
            </a></li>
          <?php
      endforeach;
     } ?>

我一直试图让这个工作超过一天,我真的只是在圈子里去。

非常感谢帮助实现这项工作。

2 个答案:

答案 0 :(得分:3)

这应该适合你,它只有1级深,但你应该得到要点。

echo "<ul>";    
if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        echo "<li><h1>".get_the_title()."</h1>";

        $args=array(
                'orderby' => 'menu_order',
                'order' => 'ASC',
                'posts_per_page' => 3,
                'post_type' => get_post_type( $post->ID ),
                'post_parent' => $post->ID
        );

        $childpages = new WP_Query($args);

        if($childpages->post_count > 0) { /* display the children content  */
            echo "<ul>";
            while ($childpages->have_posts()) {
                 $childpages->the_post();
                 echo "<li><h2>".get_the_title()."</h2></li>";
            }
            echo "</ul>";
        }
        wp_reset_query();

        echo "</li>";
    }
}
echo "</ul>";

答案 1 :(得分:0)

我尝试了一些类似的东西并且深入了几个层次。

Page 1
|
|-Child 1
|
|-Child 2
    |
    |-Grand child 1
    |
    |-Grand child 2
        |
        |-Great grand child 1
        |
        |-Great grand child 2

完整的代码就在这个链接上 https://gist.github.com/bahiirwa/3aee9cd7732b1f438dfcb5909075cc61