• お世話になります。

    今回やりたいと思ってなかなか出来なく、お力を借りたく投稿致しました。
    宜しくお願いします。

    親ページがあり、それに属する子ページがあり、またその子ページに属する孫ページを
    親ページに一覧表示したいと思っているのですが、なかなかできません。
    こちらを参考させて頂き、
    子ページを表示することは出来たのですが。。。孫が表示できず。。。

    やろうとしていることは

    ・top
     ├・A
     │  ├・A1
     │  ├・A2
     │  ├・A3
     │  └・A4
     ├・B
     │  ├・B1
     │  ├・B2
     │  ├・B3
     ├・C
     │  ├・C1
     │  ├・C2
     │  ├・C3

    topにA,B,Cの子は表示せずにその配下にある孫ページのタイトルとカスタムフィールドを表示させたいのですが。

    なにぶん初心者でして、まだうまく理解できていません。

    どうぞ宜しくお願い致します。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • モデレーター jim912

    (@jim912)

    satceeeさん、こんにちは。

    方法としては、下記のようになります。

    1. get_pages関数のparentパラメータに親ページのIDを指定し、子のページのみ取得する。
    2. 取得できた子ページをforeachでループし、今度はget_pagesのparentパラメータに子ページのIDを指定して、孫ページを取得
    3. 孫ページをループさせて、カスタムフィールドの値を取得して、リスト表示
    トピック投稿者 satceee

    (@satceee)

    jim912さん、初めまして。
    ご返信ありがとうございます。なかなかアドバイスを頂けず、半ばあきらめていました。
    本当に有り難うございます。

    早速自分の出来る限りで試してみます。
    正直、投稿頂いた、1,の親ページのID取得段階から分かっていないので。。。(汗

    また、分からないところがありましたら書き込みますので、どうぞ宜しくお願い致します。

    ちょっと違うかもしれませんが、今日私が公開させていただいたプラグインが特定のページのID以下のページを表示する機能を実装しています。

    http://firegoby.theta.ne.jp/wp/localmenu

    50行目にgetChildPages() というメソッドがあるんですが、そのメソッドは指定されたID以下のページを再帰的に取得して、ネストしたulで返しています。

    以下はその部分の抜粋です。

    private function getChildPages($parent = null)
        {
            global $wpdb;
            global $post;
    
            if (!$parent || !preg_match("/^[0-9]+$/", $parent)) {
                $parent = $post->ID;
            }
            $sql = "SELECT * FROM {$wpdb->posts}
                    WHERE
                        post_type='page'
                        and post_parent = '{$parent}'
                        and post_status='publish'
                    order by menu_order, post_title";
            $results = $wpdb->get_results($sql);
            if (!$results) {
                return;
            }
    
            $html = '<ul>';
            foreach($results as $data){
                $html .= "<li>";
                $html .= '<a href="'.get_page_link($data->ID).'">';
                $html .= $data->post_title;
                $html .= "</a>";
                $html .= $this->getChildPages($data->ID);
                $html .= "</li>\n";
            }
            $html .= '</ul>';
            return $html;
        }

    ちなみにIDは、管理画面の記事の編集画面のURLのpostというパラメータの値です(^^)

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「親ページにそれに属する孫ページを表示したい。」には新たに返信することはできません。