サポート » 使い方全般 » サイドメニューにおける親ページ・子ページ・孫ページの表示

  • サイドメニューの親ページ・子ページ表示についてご教授ください。

    現在サイトは下記の構成になっています。
    こちらは全てページで、上位にページ属性にて親として紐付けしております。
    ※A1の親はA、A101の親はA1

    A
    ├ A1
      ├ A101
      ├ A102
      ├ A103
    ├ A2
    ├ A3
      ├ A301
      ├ A302
      ├ A303
      ├ A304

    B
    ├ B1
      ├ B101
      ├ B102
      ├ B103
      ├ B104
    ├ B2
    ├ B3

    行いたいことは、下記のとおりです。

    Aにページ遷移すると、
    サイドメニューに表示されるのは下記のように。
    A
    ├ A1
    ├ A2
    ├ A3

    A1、A101にページ遷移すると、
    表示されるのは下記のように。
    A
    ├ A1
      ├ A101
      ├ A102
      ├ A103
    ├ A2
    ├ A3

    A2にページ遷移すると、
    表示されるのは下記のように。
    A
    ├ A1
    ├ A2
    ├ A3

    現在、下記をside.phpに記載しています。

    <ul>
    <?php
    $ancestor = array_pop(get_post_ancestors($post->ID));
    if (is_page() && $post->post_parent ) {
    $parent=$post->post_parent;
    } else {
    $parent=$post->ID;
    }
    $ul_top_title = get_the_title($ancestor);
    $ul_top_url = get_permalink($ancestor);
    ?>
    <?php
    if(empty($ancestor)) { wp_list_pages('depth=0&sort_column=menu_order&child_of='.$post->ID.'&title_li=');}
    else { wp_list_pages('depth=0&sort_column=menu_order&child_of='.$ancestor.'&title_li=');}?>
    </ul>

    こちらですと、Aの子ページ・孫ページが全て表記されてしまいます。
    PHPは初心者で色々なサイトやこのフォーラムを参考にしていますが、
    どうも上手くいきません。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック投稿者 ttner

    (@ttner)

    すいません。訂正です。

    Aにページ遷移すると、
    サイドメニューに表示されるのは下記のように。
    ├ A1
    ├ A2
    ├ A3

    A1、A101にページ遷移すると、
    表示されるのは下記のように。
    ├ A1
    ├ A101
    ├ A102
    ├ A103
    ├ A2
    ├ A3

    A2にページ遷移すると、
    表示されるのは下記のように。
    ├ A1
    ├ A2
    ├ A3

    一番上の親ページは表示なしで訂正です。
    どうかお願いいたします。

    よく状況が飲み込めないのですが、こういうことですかね?
    自分のところで恐縮ですが

    http://www.naviwave.com/blog_w/wp_plugin/page-tree/#

    トピック投稿者 ttner

    (@ttner)

    >kvexさん

    説明べたですいません。

    「NW Page Tree」ためさせていただきました。
    こちらのタイプ1に近いのですが、

    親ページAではAに日紐付けられている
    子ページのみの一覧を表示させ、
    (Aを含む親ページの一覧は表示無し)
    ├ A1
    ├ A2
    ├ A3

    孫ページがある子ページA1では、
    他の子ページとその子ページに紐付けられている、
    孫ページの一覧を表示させる。
    (Aを含む親ページの一覧は表示無し)
    ├ A1
      ├ A101
      ├ A102
      ├ A103
    ├ A2
    ├ A3

    孫ページA101~A103ではA1と同じ表示。
    (Aを含む親ページの一覧は表示無し)
    ├ A1
      ├ A101
      ├ A102
      ├ A103
    ├ A2
    ├ A3

    こちらは可能でしょうか?

    ずいぶん変わった仕様ですが、要は

    最初は
    A,B,C,D・・・

    子ページ以下に入った場合は
    A,B,C,D・・・は表示無し
    かつ、自分+直下のページ

    ということですね。NW Page Tree でいけば、最上位のページを表示させなければ良いだけっぽきがするのですが、そういう理解でよかったですかね?

    トピック投稿者 ttner

    (@ttner)

    ある企業のサイトを構築しています。
    各部門ごとのページを作成していて、
    (孫ページが大変多いです。)
    このような仕様を求められました。

    >最初は
    >A,B,C,D・・・
    >
    >子ページ以下に入った場合は
    >A,B,C,D・・・は表示無し
    >かつ、自分+直下のページ
    >
    >ということですね。NW Page Tree でいけば、最上位のページを表示させなければ良いだけっぽきがするのですが、そういう理解でよかったですかね?

    その通りです!

    あれ?

    <ul>
    <?php
    $parent = array_reverse($post->ancestors);
    wp_list_pages('echo=1&title_li=&child_of='. $parent[0]);
    ?>
    </ul>

    これだけだと用が足りないのかな?

    すみませんダメですね。

    <ul>
    <?php
    if(is_page()){
    	$parent = array_reverse($post->ancestors);
    	if($parent) :
    		$pages = $parent[0];
    	else :
    		$pages = $post->ID;
    	endif;
    }
    if($pages){
    	wp_list_pages('echo=1&title_li=&child_of='. $pages);
    
    }
    else{
    	wp_list_pages('echo=1&title_li=&depth=1');
    
    }
    ?>
    </ul>

    こんなんですかね?

    トピック投稿者 ttner

    (@ttner)

    kvexさん

    ありがとうございます。
    試してみましたが、
    親ページで孫ページのリスト表示もしてしまいました。

    親ページでは子ページのみのリスト表示で、
    子ページでは子ページ(他の子ページも表示)+孫ページの表示に
    することは難しいでしょうか?

    階層はどこまで表示させたいのかわからないんですけど。

    同階層のページと、自分の子

    で、いいんですか?
    自分の親はどこまで?また、多階層はどこまで考慮するのですかね?

    トピック投稿者 ttner

    (@ttner)

    わかり辛くてすいません。
    再度説明させていただきます。

    構成は下記の通りです。

    トップページ
    A事業部(親)
       aサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)
       bサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)
       cサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)
    B事業部(親)
       aサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)
       bサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)
       cサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)
    C事業部(親)
       aサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)
       bサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)
       cサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)

    例)
    ・A事業部(親)の場合、サイドメニューに表示されるのは
       aサービス(子)
       bサービス(子)
       cサービス(子)
    ※A事業部(親)は表示されない

    ・bサービス(子)の場合、
       aサービス(子)
       bサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)
       cサービス(子)

    ・Ⅰ商品(孫)の場合、
       aサービス(子)
       bサービス(子)
          Ⅰ商品(孫)
          Ⅱ商品(孫)
          Ⅲ商品(孫)
       cサービス(子)

    >自分の親はどこまで?また、多階層はどこまで考慮するのですかね?
    一番上の親は表示されません。階層は3階層までです。

    なるほど。
    あいかわらず理解力が低いのでご迷惑をおかけしますが、こんな感じですかね?
    煮詰まってないので汚らしいですが

    function list_page_tree3(){
    	global $post;
    	if(is_page()){
    			$list = $post->ancestors;
    			$parent['list'] = array_reverse($list);
    			$parent['cnt']  = count($list);
    			$parent['top']  = array_pop($list);
    
    		if($parent['cnt']){
    			$flg = ($parent['cnt'] == 1) ? $post->ID : $parent['list'][1];
    			$pages = get_pages(array('parent' => $parent['top'], 'hierarchical' => 0));
    			foreach($pages as $id){
    				$res .= "<li><a href=\"". $id->guid. "\">". $id->post_title. "</a></li>\n";
    				if($id->ID == $flg){
    					$res .= "<ul>\n";
    					$res .= wp_list_pages('title_li=&echo=0&depth=1&child_of='. $id->ID);
    					$res .= "</ul>\n";
    				}
    			}
    		}
    		else{
    			$res = wp_list_pages('title_li=&echo=0&depth=1&child_of='. $post->ID);
    		}
    		echo $res;
    	}
    }

    これをfunction.phpにでも書いていただいて、サイドバーとかに以下を記述すれば。

    <ul>
    <?php
    	list_page_tree3();
    ?>
    </ul>

    どうですかね?
    追伸:
    先の nw_page_tree の追加機能でテストしてたので、へんな名前が付いていますが、適当に変えていただいて結構です。

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • トピック「サイドメニューにおける親ページ・子ページ・孫ページの表示」には新たに返信することはできません。