web関連

【wordpress】親子関係を持った固定ページの一覧を出す方法

【wordpress】親子関係を持った固定ページの一覧を出す方法

親固定ページ内で親含む子固定ページの一覧出力、
子固定ページ内で親含む子固定ページの一覧を出力しようとしたときの備忘録
※孫までは試してない

親子関係を持った固定ページを一覧で出力するコード

<?php if(is_page()): //固定ページの時表示 始まり ?>

<?php if (have_posts()) : while (have_posts()) : the_post();
	// 親ページのIDを取得
	$parent_id = $post->post_parent;

	// ↓現在のページが親か子かの条件分岐
	if ($parent_id) { // 子ページの時
	    $parent = $parent_id;
	} else { // 親固定ページの時
	    $parent = get_the_ID();
	}
	$children_array = get_children("post_type=page&post_parent=" .$parent );
	
	if ( count( $children_array ) > 0 ) : //子固定ページ持ってる時一覧を出力する
?>
		<ul>
		<?php 
			// 親ページのタイトルを取得
			$parent_title = get_post($parent_id)->post_title; 
			// 親ページのリンクを取得
			$parent_url = get_permalink($parent_id);
		 ?>
		<li>
			<a href="<?php echo $parent_url; ?>">
				<?php echo $parent_title; ?>
			</a>
		</li>

		<?php foreach ( $children_array as $child ) ://子固定ページ一覧を出力する
			//子固定ページのリンク
			$url = esc_url(get_permalink( $child->ID ));
			//子固定ページの見出し
			$title = esc_html( $child->post_title );
		?>
		<li>
			<a href="<?php echo $url; ?>"><?php echo $title; ?></a>
		</li>
		<?php endforeach; ?>
		</ul>
	<?php else://親固定ページしかない時 ?>
		親固定ページしかないよ
	<?php endif; ?>
<?php endwhile; endif; ?>

<?php endif; //固定ページの時表示 終わり ?>

不格好かも知れないけどとりあえず動いた

子固定ページを持ってる持ってないの条件分岐は関数化した方がいいと思う
関数化している記事あったから乗っけとく↓

▼[WordPress] 固定ページでそのページに子ページがあるかまたは子ページそのものであるかを判定
https://gist.github.com/gatespace/7147931

今回のコードは固定ページ時にサイドバーで親子関係持った固定ページを一覧で出力したかった時に調べたコード、そのうち現在のページとサイドバー内で同じリンクを持ってるaタグににclassを振るコードも作りたい