web-dev-qa-db-ja.com

ループ内でループする方法(子供を表示してから孫を表示する)

私はWordPressのためのクエリを開発しようとしています。それは私がタイトルだけで子ページのリストを表示し、それから各子ページタイトルの下に孫(子の子)ページタイトルとその内容のリストを表示できるようにします。

たとえば、出力は次のようになります。

<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クエリを使用してから、最初のクエリ内に2番目のクエリを入れ子にしてみました - これは失敗しました。

さらに、私はまたここに見られるコードを修正しようとしました: 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;
     } ?>

私は1日以上も前からこれを機能させようとしていました、そして私は本当に円の中を歩き回っています。

これを機能させるために助けをいただければ幸いです。

2
Zach Nicodemous

次のようにしてください。

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