ど素人から毛を生やす。<延>

記事が所属する固定ページの多階層リストを出力する

Web > WordPress > 固定ページ 2015年12月4日(最終更新:8年前)

2015年12月4日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

どもです。

けっこう前に書いたこちらの記事のパワーアップ版です。

出力は wp_list_categories に近い感じで、子ページがあるときは<li>内に<ul>が出力される感じです。
また、子ページがあるときのみリストを表示するようにしました。
それと、現在表示中のページについては nowPage のクラスがつくようになっています。

プログラム的には、
再帰関数を用いて複数階層の取得と表示を行って、
配列の取得関数を query_posts から get_posts に変更した感じです。

なにはともあれソースをポン!_(:3」∠)_


function get_top_level_page(){
	if(is_page()){
		$pageParent = "";
		$pageID = get_the_ID();
		for($i = 1; $i <= 100; $i++){
			$pageParent = get_page($pageParent); if($pageParent->post_parent == 0){
				break;
			}
			$pageParent = $pageParent->post_parent;
		}
	return $pageParent;
	}
}

function pageChildList($getPageId,$postId,$pageParent){
	$pagesArr = array(
	  'numberposts' => -1 ,
	  'post_type' => 'page' ,
	  'order' => 'ASC' ,
	  'post_parent' => $getPageId
	);
	$pageDatas = get_posts($pagesArr);
	if($pageDatas){
		if($pageParent->ID == $getPageId){ ?>
<aside class="pageArchive">
<h4><a href="<?php echo get_permalink($pageParent->ID); ?>"><?php echo $pageParent->post_title; ?></a></h4>
		<?php }
		echo '<ul>';
		foreach($pageDatas as $pageData){
			?><li<?php if($postId==$pageData->ID) echo ' class="nowPage"'; ?>><a href="<?php echo get_permalink($pageData->ID) ?>"><?php echo $pageData->post_title; ?></a><?php
			pageChildList($pageData->ID,$postId,$pageParent);
			echo '</li>';
		}
		echo '</ul>';
		if($pageParent->ID == $getPageId){ ?>
</aside>
		<?php }
	}
}

以上を、functions.php に書いておきます。
関数の呼び出しについては、


$postId = get_the_ID();
$pageParent = get_top_level_page();
pageChildList($pageParent->ID,$postId,$pageParent);

こんな感じで。

get_top_level_page() は、最上位ページを取得する用なので、本題は pageChildList() の方です。
$pagesArr が条件を指定するところです。あとは適当にHTMLタグを変えたり、表示するデータを変えたりすれば良いんじゃないかと思います。

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)