• 解決済 igarashi5620

    (@igarashi5620)


    お世話になります。
    下記のコードを使用して、子ページのリスト表示が可能ですが、
    この場合は、全部の子ページのリストが表示されてしまいます。

    これを応用してコンテンツ毎の子ページのリストのみを親ページに表示させたいのです。

    例をあげると親ページが「service」の場合で、子ページが「service1」とした場合、
    リスト表示を「サービス」のページのボタンのみ下記のようにしたいのです。
    下記以外のボタンは階層表示なし。
     サービス
     └サービス1

    同じように、サービス以外のページでも
    親ページが「sample」の場合で、子ページが「sample1」とした場合、
    リスト表示をサンプルのページのボタンのみ下記のようにしたいのです。
    下記以外のボタンは階層表示なし。
     サンプル
     └サンプル1

    親ページの「service」や「sample」はパーマリンクで指定しているだけですが、
    それぞれのコンテンツのみにリスト表示させることは可能でしょうか?

    <?php
      if($post->post_parent)
      $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
      else
      $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
      if ($children) { ?>
      <ul>
      <?php echo $children; ?>
      </ul>
      <?php } ?>
9件の返信を表示中 - 1 - 9件目 (全9件中)
  • 2日ほど前に解決した、下記スレッドがそのものでしょう。

    http://ja.forums.wordpress.org/topic/2588

    トピック投稿者 igarashi5620

    (@igarashi5620)

    kvex さん

    ありがとうございます。
    下記のスレッドの件、試してみました。
    http://ja.forums.wordpress.org/topic/2588
    1「サービス」をクリックで下記のとおり

    サービス(親ページ)
    └サブサービス

    2サブサービスをクリックで下記のとおり
    サービス(親ページ)
    └サブサービス
     └サブサブサービス

    となりましたが、「サービス」をクリックした場合に全ての階層を表示するようにしたいのですが?
    また親ページ表示部分には画像を使用したいので、その部分を画像に変更する事は可能でしょうか?

    あぁ、なるほど。
    直下だけでなくて、そのページの属するツリーを全て展開させるんですね。

    だったら、もっと短いコード済みますね。
    なんか、どっかにプラグインあったような気もしますが・・・

    ローカル環境の便宜上、前回のスレッドに追加してますので関数名が似ていてすみません。

    function wp_list_pages_tree2($post){
    	if(is_page()){
    		$list = $post->ancestors;
    		$parent['list'] = array_reverse($list);
    		$parent['cnt']  = count($list);
    		$parent['top']  = array_pop($list);
    		if (!$parent['cnt']) : $parent['top'] = $post -> ID;
    		endif;
    		$page_list = get_pages('parent=0&sort_column=menu_order');
    		foreach($page_list as $id){
    			echo '<li><a href="'.get_permalink($id->ID).'">'.get_the_title($id->ID).'</a>'."\n";
    			if($id->ID == $parent['top']){
    				echo "<ul>\n";
    				wp_list_pages('title_li=&child_of=' . $id->ID );
    				echo "</ul>\n";
    			}
    			echo "</li>\n";
    		}
    	}
    	else{
    		wp_list_pages('depth=1&title_li=');
    	}
    }

    で良いと思います。
    画像とのことでしたので、上記の a タグまわりがトップレベルのツリーになりますから、そこを画像タグに置き換えれば良いのではないでしょうか?
    たとえば、id番号.jpg などの画像ファイル名にすれば便利かと思います。

    トピック投稿者 igarashi5620

    (@igarashi5620)

    kvex さん

    すみません。せっかく作成いただいたのですが、
    事情により直下だけの表示に変更しました。
    下記のとおり修正したのですが、
    なにかおかしい部分がありましたら、ご指示ください。
    ソースを見ると、なにも階層がない部分に空白が出来たりしましたので。

    function wp_list_pages_tree2($post){
    	if(is_page()){
    		$list = $post->ancestors;
    		$parent['list'] = array_reverse($list);
    		$parent['cnt']  = count($list);
    		$parent['top']  = array_pop($list);
    
    		$page_list = get_pages('parent=0&sort_column=menu_order');
    		foreach($page_list as $id){
    			echo ''."\n";
    			if($id->ID == $post->ID){
    				echo "<ul>\n";
    				wp_list_pages('depth=1&title_li=&child_of=' . $post->ID );
    				echo "</ul>\n";
    			}
    			if($id->ID == $parent['top']){
    				$pointer = $parent['list'];
    				$cnt = 0;
    				while($buf = next($pointer)){;
    					echo '<ul>'."\n";
    					echo '<li><a href="'.get_permalink($buf).'">'.get_the_title($buf).'</a>'."\n";
    					$cnt++;
    				}
    				echo '<ul><li><a href="'.get_permalink($post->ID).'">'.get_the_title($post->ID).'</a>'."\n";
    				echo "<ul>\n";
    				wp_list_pages('depth=1&title_li=&child_of=' . $post->ID );
    				echo "</ul>\n";
    				for($i=0;$i<$cnt;$i++){
    					echo '</li></ul>'."\n";
    				}
    				echo '</li></ul>'."\n";
    
    			}
    			echo "\n";
    		}
    	}
    	else{
    		wp_list_pages('depth=1&title_li=');
    	}
    }
    トピック投稿者 igarashi5620

    (@igarashi5620)

    すみません、追記ですが、
    リスト部分に「»」も入れられると良いです。

    直下だけでしたら、最初のコードでいいでしょう。wp_list_pages_tree

    また、» を入れたいのであれば、文字を追記してもいいですが、スタイルシートで実現したほうが効率が良いでしょう?

    トピック投稿者 igarashi5620

    (@igarashi5620)

    kvex さん

    ありがとうございます。
    スタイルシートで「»」を入れることって可能なんですか?
    画像しか出来ないかと思っていましたが。。
    記述方法についてヒントを教えていただけると幸いです。
    よろしくお願いいたします。

    KKT

    (@kvex)

    デフォルトテーマでも使われていますが、その部分のスタイルシートを例に挙げると

    .entry ul li:before, #sidebar ul ul li:before {
    	content: "0BB 020";
    	}

    ですね。

    トピック投稿者 igarashi5620

    (@igarashi5620)

    kvex さん

    確認出来ました。
    いろいろと大変お世話になりました。
    ありがとうございました。

9件の返信を表示中 - 1 - 9件目 (全9件中)

トピック「子ページのリスト表示について」には新たに返信することはできません。