トップページやサイドバーなどに、ある親ページに属する子ページ一覧を表示するためのソースです。ググればいくつも見つかるのですが、query_postsを使っているものばかりでしたので、get_postsで書いた備忘録です。また親ページのIDを指定すると、ローカルから本番サーバーへ移動するときなど、IDが変わってしまうことがありえるので、スラッグで指定できるようにします。

ソースはこちらです。

<?php
$get_page_id = get_page_by_path("スラッグ名");
$get_page_id = $get_page_id->ID;
$my_pages = get_posts(array(
'post_type' => 'page',
'posts_per_page' => '-1',
'post_parent' => $get_page_id,
'orderby' => 'menu_order',
'order' => 'ASC'
));
?>
<ul>
<?php if($my_pages):
foreach ($my_pages as $post):
setup_postdata($post);
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach;
wp_reset_postdata();
endif; ?>
</ul>

2行目のget_page_by_path()で、指定したスラッグの固定ページオブジェクトを変数$get_page_idに格納して、3行目でそのIDを再度$get_page_idに入れ直しています。

これはこちらの【WordPress】スラッグ名からIDを取得する方法 – Qiitaから使わせていただきました。

4行目からはget_postsの配列でオプションを指定して、$my_pagesに格納して、それを14行目のforeachで一つずつ取り出して表示、という処理をしています。

ポイントは5行目でpost_typeを「page」にして固定ページを指定しているところと、7行目の親ページIDを指定する「post_parent」で、IDではなく、スラッグから取得したIDを入れた変数$get_page_idにしているところですね。あとの表示数や並び順などはお好きなように指定してください。

WPをCMS的に使うと固定ページの階層化は多用すると思うので、重宝すると思います。