サポート » 使い方全般 » 今いるページの枝のみ展開されるページリストのplugin

  • 皆さん、いつもお世話になっております。
    (タイトルが分かりにくくてすみません)

    WordPressをCMSとして使う際に以下のようなページリスト表示機能が必要になりました。

    例えば,下のようなツリーのページ群があるときに、

    a [親]
    b [親]
    -b1 [子]
    -b2 [子]
    c [親]
    -c1 [子]
    –c1-1 [孫]

    aを閲覧時には

    a
    b
    c

    b、もしくは、b配下を閲覧時には

    a
    b
    -b1
    -b2
    c

    c、もしくは、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」には新たに返信することはできません。