WordPressでは、固定ページに親子の関係を持たせることができます。
この固定ページの親ページに子ページの一覧を表示する方法を紹介します。
投稿におけるアーカイブやカテゴリページのようなイメージです。
<?php if(!$post -> post_parent): ?>
<?php $child_getposts = get_pages(array(
'child_of' => get_the_ID(),//現在のページIDを指定
'sort_order' => 'ASC'//昇順
));?>
<?php foreach($child_getposts as $post):?>
<?php setup_postdata($post);?>
<div class ="child-post">
<?php
if(has_post_thumbnail()){
the_post_thumbnail('thumbnail');
}
?>
<p><a href = "<?php the_permalink(); ?>"><?php the_title();?></a>
<?php the_excerpt();?></p>
</div>
<?php endforeach; wp_reset_postdata();?>
<?php else : ?>
<?php endif; ?>
こちらは関数get_pages()
を使ったものです。
リストだけではなく、本文や抜粋、サムネイルなど、コンテンツの中身も出力できます。
上記のリスト出力のパターンも同様ですが、こういったケースでは、page-parent.php
のような固定ページ用のテンプレートを用意するのがシンプルです。
ただ、この例では、1行目の!$post -> post_parent
で親ページを持っていない、つまり、最上位の親ページの場合のみ、子ページのリストを出力するという条件分岐をつけています。
子ページを持つ親ページではすべて出力するのであれば、page.php
に追記すればOKです。
他は最低限のパラメータしか含めていませんが、基本的な動作に問題はないかと思います。
パラメータ設定の例
ページ属性の順序でのソートはsort_column
を使用します。
'sort_column' => 'menu_order'
決まった親を持つ子ページの情報はページIDを指定します。
'child_of' => '29'
特定の親ページに属する子ページをリスト表示するのであれば、wp_list_pages()
を使うのがシンプルです。
<?php
$children = wp_list_pages('title_li=&child_of='. $post->ID. '&echo=0');
if ( $children ): ?>
<ul>
<?php echo $children; ?>
</ul>
<?php endif; ?>
パラメータchild_ofの$post->ID
で親である現在の固定ページのIDを指定しています。
任意の親ページ(例として29)を指定するには、child_of=29
とします。
WordPressは標準機能のEmbedによって、URLの記述だけでサムネイル付きのブログカード風リンクが作れるので、これで代用するのも悪くないと思います。