WordPressカスタマイズ事例

固定ページの下層ページ一覧表示(親が第2階層、子が第3階層の場合)

以前、「固定ページの下層ページ一覧を取得し、自ページにはクラスを付与して、一覧表示する」の記事で、

会社概要
 代表挨拶
 会社沿革

のような階層を持つ固定ページがあったときに下層ページの一覧(ここでは「代表挨拶」、「会社沿革」)を出力する方法について、ご紹介しました。
しかし、これは「会社概要」ページがトップページの直下、つまりWordPress上では親ページのないページの下層ページ一覧を出力する方法であって、

english
 会社概要(conpany)
  代表挨拶(greeting)
  会社沿革(history)

のように「english」という親ページを持つ、つまり第2階層に位置する「会社概要」ページの子ページ一覧を出力したい場合には適用できません。

そこでここでは、親ページが第2階層、子ページが第3階層の場合の、子ページ一覧の出力方法についてご紹介します。
 
まず、「固定ページの下層ページ一覧を取得し、自ページにはクラスを付与して、一覧表示する」で記述した、最上位親ページを取得する関数を以下のように rootページを取得するだけではなく、親子ページをまるっとセットにしてオブジェクトとして返せるように直します。

function.php に以下を記述。

function ps_get_root_page( $parent_id , $object = true , $root = true ) {
if( $parent_id == false ) {
return false;
}
if( $object == true ) { //返り値がpostオブジェクト
while( $parent_id ) {
$page = get_post( $parent_id );
$result[] = $page;
$parent_id = $page->post_parent;
}
} else { //返り値がpostID
while( $parent_id ) {
$page_id = get_post_field( 'post_parent' , $parent_id );
$result[] = $parent_id;
$parent_id = $page_id;
}
}
//配列を逆順に(rootを0に)
$result = array_reverse( $result );
//rootがtureの場合0番目(rootページのみ)をセット
if( $root == true) {
$result = $result[0];
}
return $result;
}

 
次に、上の関数を使って、第二階層ページを取得するショートコードを作成。

if ( ! function_exists( 'sidebar_kasou_en' ) ){
function sidebar_kasou_en() {
global $post, $posts;
$root_page = ps_get_root_page( $post->ID,true,false ); //親子の配列オフジェクトを取得する
$thePostID = $root_page[1]->ID; //第二階層ページのID取得
$children = wp_list_pages('title_li=&child_of='. $thePostID. '&echo=0'); //第三階層ページ取得
$html='';
if ( $children ){
$html.= $children;
}
return $html;
}
add_shortcode('sidebar_kasou_en', 'sidebar_kasou_en');
}

あとは、第三階層のページ一覧を表示したい場所でショートコード「sidebar_kasou_en」を呼び出せば解決です。


関連するWordPressカスタマイズ事例