今いるページの枝のみ展開されるページリストのplugin
-
皆さん、いつもお世話になっております。
(タイトルが分かりにくくてすみません)WordPressをCMSとして使う際に以下のようなページリスト表示機能が必要になりました。
例えば,下のようなツリーのページ群があるときに、
a [親]
b [親]
-b1 [子]
-b2 [子]
c [親]
-c1 [子]
–c1-1 [孫]aを閲覧時には
a
b
cb、もしくは、b配下を閲覧時には
a
b
-b1
-b2
cc、もしくは、c配下を閲覧時には
a
b
c
-c1
–c1-1といったページツリー表示になるというものです。
上記要件を満たすpluginをさがしていましたが、サブページだけ表示するものや、javascriptで開閉の出来る超高機能(今回はOverSpec)なものは見つかれど、ピッタリ来るシンプルものが見つからず、結局、自分で関数を作ってみて、ひ孫ページまで存在するツリー構成でも、一応、想定した動きをするところまでこぎ着けました。
そこで、もしも同じニーズを持った方がいらっしゃった場合に、少しでも役に立てばとplugin化も考えましたが,何ぶん、日曜プログラマー以下のスキルなので、まずもって自分のコードが正しいのか、もし正しかったとしても効率的なのかが全く自信がありません。。。(wp_list_pages()の仕様が変わった時には、破綻してしまう構成なのは仕方ないかとは割り切っています)
もしもお手隙の方がいらっしゃいましたら、以下のコードの欠点をご指摘いただけませんでしょうか。もしくは、『自作せずとも、そういうプラグインがあります』でも、大変有り難いです。
function fl_pages() {//WP2.5 and later only global $post; //get parents page list $parents=wp_list_pages('title_li=&depth=1&sort_column=menu_order&echo=0'); if (is_page() && $post->post_parent ) { //when the page has a parent $top_of_subpage = array_pop( get_post_ancestors( $post->ID ) ); } else { //when the page has no parent $top_of_subpage=$post->ID; } //get children page list if ( $top_of_subpage > 0 ) { $children = wp_list_pages('title_li=&sort_column=menu_order&child_of='.$top_of_subpage.'&echo=0'); } if ( $children ) { $children="<ul class='fl-childrenpages fl-children-of-".$top_of_subpage."'>\n".$children."</ul>\n"; } //insert children page list into parents page list $children_insert_regex='(page-item-'.$top_of_subpage.'[^<>"]+)("><a href="[^<>]+>[^<>]+<\/a>)'; $children_insert_regexafter='$1$2'.$children; $fl_pages = preg_replace("/".$children_insert_regex."/",$children_insert_regexafter,$parents); echo $fl_pages; }
ちなみに、私の環境は、Wordpress2.7.1&Coreserverで、今のところ、上記関数をfunctions.phpに入れて、使っています。
いつも願いばかりで大変恐縮ですが、
ご教授の程、どうぞ宜しく御願いいたします。
- トピック「今いるページの枝のみ展開されるページリストのplugin」には新たに返信することはできません。