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

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

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

このページは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)