【WordPress】get_the_ID()を用いて子ページの記事一覧を取得する方法

2019年6月4日

今回は、ある固定ページを親として、それに連なる固定ページの記事一覧を取得する方法です。
以下のような形を目指します。

一番上の「page」は「page.php」を表します。

get_pagesの引数にget_the_ID()を使う

get_pages()は、ざっくり言うと固定ページの情報を取得する関数です。

そして、get_pages()の引数の1つであるchild_ofという引数について、「’child_of’=>親ページのID=get_the_ID()」とすることで、現在いるページ(親ページ)の子ページ一覧を取得することが出来ます。

以下を記述すると、一覧を取得できます。

<?php $my_getposts = get_pages(array(
	'child_of' => get_the_ID()//現在のページID
	));?>
	
<?php foreach($my_getposts as $post):?>
	<?php setup_postdata($post);?>
	
	<div class ="child-post">
		<!--タイトル・概要 			 -->
		<h2>
			<a href = "<?php echo $permalink;?>"><?php the_title();?></a>
			<?php the_excerpt();?>
		</h2>
	</div><!--end of .child-post 	 -->
		
	<?php endforeach; wp_reset_postdata();?>

更に、以下の通り記述すると、現在のページが親ページか子ページかを判断して処理を分けることが出来ます。

親ページの場合は記事の一覧。

子ページの場合はその内容を表示する、という場合は以下の通り記述します。

最初のif文で親ページを持っているか否かの判定を行っています。

<?php if($post -> post_parent:?>
	<?php the_content();?>
<?php else:?>
	<?php $my_getposts = get_pages(array(
		'child_of' => get_the_ID()//現在のページID
		));?>
		
		<?php foreach($my_getposts as $post):?>
			<?php setup_postdata($post);?>
		
			<div class ="child-post">
				<!--タイトル・概要 			 -->
				<h2>
					<a href = "<?php echo $permalink;?>"><?php the_title();?></a>
					<?php the_excerpt();?>
				</h2>
			</div><!--end of .child-post 	 -->
			
		<?php endforeach; wp_reset_postdata();?>
<?php endif;?>

子ページを表示すると、以下のように表示されます。

親ページと同様に「page.php」が適用されていますが、子ページの内容(the_content()の内容)のみが出力され、分岐していることが分かります。