web-dev-qa-db-fra.com

Comment faire une boucle dans une boucle (afficher les enfants puis les petits-enfants)

J'essaie de développer une requête pour WordPress qui me permettra d'afficher une liste de pages enfants avec des titres uniquement, puis sous chaque titre de page enfant, une liste de titres de page de petits-enfants (enfants de l'enfant) ET leur contenu.

Ainsi, par exemple, le résultat devrait ressembler à ceci:

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

Cela doit être fait de manière dynamique, ce qui signifie que je ne souhaite pas spécifier le numéro d'identification de la publication dans le cadre de la requête.

J'ai essayé d'utiliser une requête WordPress standard, puis d'imbriquer une deuxième requête dans la première - cela a échoué.

De plus, j'ai aussi essayé de modifier le code vu ici: http://wordpress.org/support/topic/query-child-pages-of-a-current-page-and-loop -through-each-child-page

Enfin, j'ai aussi essayé de modifier ce code:

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

J'essaie de faire fonctionner cela depuis plus d'un jour maintenant et je tourne vraiment en rond.

J'apprécierais beaucoup de l'aide pour que cela fonctionne.

2
Zach Nicodemous

Essayez quelque chose comme:

<?php if ( have_posts() ) : ?>
    <?php while ( have_posts() ) : the_post(); ?>
        <div class="parent-post">
            <?php the_title('<h2>', '</h2>'); ?>
            <?php $children = new WP_Query( array('post_type' => 'page', 'post_parent' => get_the_ID() )); ?>
            <?php if ( $children->have_posts() ) : ?>
            <ul class="post-children">
                <?php while ( $children->have_posts() ) : $children->the_post(); ?>
                    <li><?php the_title('<h3>', '</h3>'); the_content(); ?></li>
                <?php endwhile; ?>
            </ul>
            <?php endif; ?>
    <?php endwhile; ?>
<?php endif; ?>
3
felipelavinz