WordPressのカスタム投稿で、親子関係の記事を一覧で表示する方法(コード)をご紹介します。
管理画面の設定
まず管理画面の設定から行います。
(カスタム投稿用プラグイン「Custom Post Type UI」を使用している前提です。)
サイドバーの「CPT UI」の「投稿タイプを編集」から、追加ラベルの「階層」を「偽」から「真」へ変更します。
そうすると、投稿ページでページ属性(親ページ)を設定することができるようになります。
親子関係の記事一覧を表示する
親子関係の記事一覧を表示させるページファイルに、こちらのコードを記述します。
クエリのパラメータは任意でカスタマイズしてください。
コード
<?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(); ?>




