[WordPress] wp_list_pages|固定ページの同階層と自分の子供のリストを出力する。

| コメント(0) | トラックバック(0) | append.gif | delicious.gif
コーポレートページのナビを作成しました。固定ページを上下左右に移動出来るSidebarです。
構成を下記のように仮定し、動作を考えます。

―Home
 ― A
  ―― Aa
 ― B
  ―― Ba
  ―― Bb
   ――― Bba
   ――― Bbb
   ――― Bbc
 ―C
 ―D

希望する出方は、現在の固定ページ同階層+自分の子供。
<Aにいる場合>
[Home]
A
 ―― Aa
― B
― C
― D

<Bbにいる場合>
[B]
― Ba
Bb
―― Bba
―― Bbb
―― Bbc

<Bbbにいる場合>
[Ba]
― Bba
Bbb
― Bbc

<Cにいる場合>
[Home]
― A
― B
C
― D

このリスト+[自分の親の表示]があれば、上下左右に移動できるはず。
と言うことでwp_list_pages()の標準オプションにはそのような設定がなく、
beginsprite logさんの、Wordpress, 親ページと子ページを全部出力を参考にがんばってみました。

/***************************/
<div id="SideMenu">
<h2>
<?php
//親を出す
if($post->post_parent){
echo '<a href="'.get_permalink($post->post_parent).'">'.get_the_title($post->post_parent).'</a>';
}else{
echo '<a href="/">ホーム</a>';
}
?>
</h2>
<div>
<ul>
<?php
if(wp_list_pages("title_li=&child_of=$post->ID&echo=0" )){
//子供がいるときは、同階層(兄弟)と、自分の子供だけ出す。
$list_pgs='';
$wpdb;
//同階層固定ページのIDを取得。
$sql = "SELECT * FROM $wpdb->posts WHERE (post_type = 'page' AND post_status = 'publish') AND post_parent = $post->post_parent ORDER BY menu_order ASC";
$values = array_values($wpdb->get_results($sql));
foreach ($values as $key){ $list_pgs.= $key->ID.','; }
//子供ページのIDを取得。
$sql = "SELECT * FROM $wpdb->posts WHERE (post_type = 'page' AND post_status = 'publish') AND post_parent = $post->ID ORDER BY menu_order ASC";
$values = array_values($wpdb->get_results($sql));
foreach ($values as $key){ $list_pgs.= $key->ID.','; }
//同階層と子供ページのIDをwp_list_pages()に投げ込んで出力。
wp_list_pages('include='.$list_pgs.',&title_li=' . __('Pages').'&title_li=');
}else{
//子供がいないときは、同階層だけ出力。
echo wp_list_pages('child_of='.$post->post_parent.'&depth=1&title_li=&sort_column=menu_order');
}
?>
</ul>
</div>
</div>
/***************************/

無駄な処理をしているような気がしますが、、。 希望の動きなのでOK!

----
鶴羽佳秀

トラックバック(0)

トラックバックURL: http://www.tsuruha.com/mt/mt-tb.cgi/90

コメントする

最近のブログ記事

鎌倉でフォトウォークをしてきたよ
6/23日OPEN バーガーキング大崎店に行ってきたよ。
CANON IXY 30S 実写レビュー Vol.4|夜の写真