トップページやサイドバーなどに、ある親ページに属する子ページ一覧を表示するためのソースです。ググればいくつも見つかるのですが、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的に使うと固定ページの階層化は多用すると思うので、重宝すると思います。
最近のコメント