カテゴリー
WordPressカスタマイズ

固定ページの親ページに子ページのリストを表示する

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の記述だけでサムネイル付きのブログカード風リンクが作れるので、これで代用するのも悪くないと思います。
profile image

執筆:R3098

WEBサービス構築・監修が生業です。WordPress 関連では Aurora Heatmap などのプラグイン開発も行っています。サイト運営者の力になりたいと考えます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。