Web全体やリファレンス内を検索すると幸せになれますよ。
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/wp_list_pages
現在見ているページの子を表示させたいとのことなのですが、
子ページを表示している際の挙動が考慮されていないので
kayamoriさんが想定しているようなコードを記述すると、
子ページを表示しているときの表示がおかしくなりそうです。
ページA(親)の子(ページaやページc)を表示しているときは、ページA(親)のリストだけ表示させる
という挙動で大丈夫でしょうか。
それでしたら
http://ja.forums.wordpress.org/topic/1056?replies=10
のやりかたで最上位の親のIDを取得して
wp_list_pagesのパラメーター「include」に渡してあげれば実現できると思われます。
(URLの例は最上位の親の子ページだけ表示させたいようなのでchild_ofが使われています)
#全て検索結果で申し訳ありません。
nawokiさん
回答をどうもありがとうございます。
教えていただいたURLは以前に見て試したのですが、この方法で全てのページが表示されてしまいました。
書き方がおかしかったかもしれませんので、もう一度書いてみます。
- 孫=北京料理
- 孫=上海料理
- 孫=広東料理
- 孫=四川料理
という構成だったときに、
1.親=中国料理を表示しているときはサイドバーに全ての子・孫・曾孫のリストを
2.子=中国茶の種類を表示しているときはサイドバーに子=中国茶に属する孫・曾孫のリストを
表示したいのです。
現状だと、孫または曾孫を表示しているときは同じ子に属するページ一覧が表示されるのでOKなのですが、子=中国茶を表示しているときは、親=中国料理に属する全ての子・孫・曾孫が表示されてしまいます。
わかりにくいかもしれませんが、どうぞよろしくお願いします。
ごめんなさい。自分の書いた方法では親ページしか出力されませんね(pageID個別の指定なので)
includeで取りあえず親だけ出力して、child_ofで子を書き出す必要がありました。
で、えっと、再び書いていただいた内容は最初にご質問された内容と全く違いませんか?^^;
kayamoriさんの書かれているコードは、見ているページの親の子をだけを表示させるものです。
A , A-a1 , A-a1-1 , A-A1-2 , A-a2 , A-a3
B , B-b1 , B-b1-1 , B-b1-2 , B-b2 , B-b3
…
という構成だったとしてAやA-a1-1、A-a2を表示したとき、「A-a1 , A-a1-1 , A-A1-2 , A-a2 , A-a3」が出力される、という動作のものです。
ですので全ての子ページが1つの親に所属していたら、当然全ての子が表示されます。
最初の書き方では最上位の親が複数あるように書かれていましたが…
やりたいことはわかりましたので、ちょっと考えてみますね。
その間に少しお答えいただきたいことがあります。
1.なぜそのような表示がしたいのですか?
2.書かれた例以外に最上位の親は複数ありますか? なければ何故全てのページを1つの親にまとめようとするのですか?
よろしくおねがいします。
やはりこちら
http://ja.forums.wordpress.org/topic/1056?replies=10#post-4587
に書かれていたことが応用できました。
基本的な手順は上記の質問を参考にしてください。
fanction.phpに追記
function ps_get_root_page( $cur_post, $cnt = 0 ) {
if ( $cnt > 100 ) { return false; }
$cnt++;
$post_temp = get_post( $cur_post->post_parent );
if ( $cur_post->post_parent == 0 ) {
$root_page = $cur_post;
} elseif ( $post_temp->post_parent == 0 ) {
$root_page = $cur_post;
} else {
$root_page = ps_get_root_page( get_post( $cur_post->post_parent ), $cnt );
}
return $root_page;
}
以下同様。
そして、テンプレート内で
wp_list_pages("title_li=&child_of=$root_page->ID" );
とすることで現在表示しているページの第二階層(子)のサブページのみリスト化します。
具体的には、孫=中国の茶器を表示しているとき、
孫=中国茶の歴史、孫=茶書、孫=中国茶の種類、曾孫=緑茶、孫=中国の茶器
という内容のリストが表示されます。
子=中国茶が表示されないのはパラメーター(child_of)の性質上仕方ありません。
既にroot_page->IDで子=中国茶のIDが取得できているので、それでなんとか出来ると思います。
(子=中国茶のタイトルとパーマリンクをこのIDで取得してHTML化したものを上記のリストの先頭に追加すればよいかと)
#そのように記述した場合、親ページを表示しているときも問題なく親、子、孫…のリストが出力されます。
#親以下のページは出力されませんので、「親を表示しているときは全てのページを出力したい」だとか、また違うことをしたいなら都度条件分岐させてくださいな。
nawokiさん
ご丁寧な説明、ありがとうございます!
やりたいことは、最初の質問内容の通りです。2回目の質問内容は、親の1つをピックアップしたため、2つの質問内容が違っているようになってしまいました。変な書き方をしてしまってすみません・・・。
ご質問に関する回答が遅くなりましたが、
1.なぜそのような表示がしたいのですか?
A:最上位の親が10以上あり、それぞれの親に子が10以上、孫が10以上・・・・とページコンテンツが大量にあるため、各親ページではその親に属する子・孫・曾孫のみ表示させたかったためです。同様に各子ページでもその子に属する孫・曾孫のみ表示させたかった、というわけです。
2.書かれた例以外に最上位の親は複数ありますか? なければ何故全てのページを1つの親にまとめようとするのですか?
A:問1の答えのとおり、書いた例以外の親が複数あります。
なるへそです。なっとくです。やはりそっちでしたか。
(テーマによっては上部に表示される)メニューバーに表示される項目を少なくしたい、というだけの理由なら別の方法もアリかなとは思ったのですが。
やりたいことは、最初の質問内容の通りです。2回目の質問内容は、親の1つをピックアップしたため、2つの質問内容が違っているようになってしまいました。
と、言うことは、表示されているページ以下の階層のみ列挙できればよいのですか?
自分の読解力不足でした、非常に申し訳ありません。
それでしたら私が一つ前に書いたコードだとかなり余計な動作をしてますね。
記述しなければいけないことも多いですし…。
質問時にkayamoriが提示されたコードは何度かこちらでも試しましたが、
たしかに指摘されたような動作をしています。
しかし、
現状だと、孫または曾孫を表示しているときは同じ子に属するページ一覧が表示されるのでOKなのですが、子=中国茶を表示しているときは、親=中国料理に属する全ての子・孫・曾孫が表示されてしまいます。
これですが、孫(曾孫)を表示していても、同じ階層の深さにある孫(曾孫)がリスト化されていませんか?
子を表示すると同じ階層の深さにある子がリスト化されるため、『親=中国料理に属する全ての子・孫・曾孫が表示されてしま』うのですが、それは孫(曾孫)にも言えるハズです。
話を戻しますが、
現在表示されているページ以下の階層のみリスト化したいのでしたら、めちゃくちゃ簡単です。
kayamoriさんのコードをそのまま使うとしたらこうなります
<?php
global $wp_query;
$page_id = $wp_query->post->ID;
if(wp_list_pages("title_li=&child_of=$parent&echo=0" )): ?>
<div id="submenu">
<ul class="lifestream">
<?php wp_list_pages("title_li=&child_of=$page_id" ); ?>
</ul>
</div>
<?php endif; ?>
nawoki さん
返信が遅くなりまして、すみません。
教えていただいた方法で解決致しました!!
本当にありがとうございました。