WordPressのカスタム投稿で、親子関係の記事を一覧で表示する方法(コード)をご紹介します。

管理画面の設定

まず管理画面の設定から行います。
(カスタム投稿用プラグイン「Custom Post Type UI」を使用している前提です。)

サイドバーの「CPT UI」の「投稿タイプを編集」から、追加ラベルの「階層」を「偽」から「真」へ変更します。

Image from Gyazo

そうすると、投稿ページでページ属性(親ページ)を設定することができるようになります。

Image from Gyazo

親子関係の記事一覧を表示する

親子関係の記事一覧を表示させるページファイルに、こちらのコードを記述します。
クエリのパラメータは任意でカスタマイズしてください。

コード

<?php 
    $query = new WP_Query(
      array(
        'post_status' => 'publish',// 投稿済
        'post_type' => 'blog',
    // すべての記事を出力。
        'nopaging' => 'true',
    // →この指定がないと管理画面で設定した表示件数が適用され、
    //  それ以上の記事数がある場合は表示されない記事が生じる。
      )
    );
  ?>

  <?php if( $query->have_posts() ): ?>
    <?php while( $query->have_posts() ): $query->the_post(); ?>
      <ul>

        <!-- 親記事かどうかの判定 -->
        <?php 
        if (!$post->post_parent): // 親記事をもたないとき
        ?>
        <!-- 親記事を表示 -->
        <li>
          <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

          <!-- 子記事の情報を取得 -->
          <?php 
          $args = array(
       // 親記事のIDを使って子記事を取得するため。
            'post_parent' => get_the_ID(),
          );
          $children = get_children( $args );// 取得した子記事の情報を配列に格納する。
          ?>

          <!-- 親記事が子記事を持つかどうかの判定 -->
          <?php if (count( $children ) > 0 ): ?>
          <ul>
            <!-- 子記事を表示 -->
            <?php foreach ($children as $child) { ?>
            <li>
              <a href="<?php the_permalink($child->ID); ?>">
                <?php echo $child->post_title; ?>
              </a>
            </li>
            <?php } ?>
          </ul>
          <?php endif; ?>
        </li>

        <?php endif; ?>

      </ul>
    <?php endwhile; ?>
  <?php endif; wp_reset_postdata(); ?>