サポート » 使い方全般 » 親ページと子ページの表示について

  • 解決済 lee31

    (@lee31)


    サイドバーにページのメニューを出力させたいのですが、
    親ページと子ページの表示について詰まってしまったので質問します。
    現在サイトは下記のような構成になっています。

    A
    ├ A1
    ├ A2
    ├ A3

    B
    ├ B1
    ├ B2
    ├ B3(ブログの新着記事を表示)

    C
    D
    E

    ※A~Eすべて「ページ」

    やりたいことは、

    • 現在位置が親ページでも子ページでも、そのページの親/子メニューを全て出力する。
      例:現在位置がAでもA1でも、サイドバーに表示されるメニューはA,A1,A2,A3(全て各ページへのリンク付き)
    • 子ページがない場合は、親ページのタイトル(リンク付き)を表示させる。
      例:現在位置Cなら、サイドバーに表示されるメニューはCのみ。
    • B3のページにはブログの最新記事を表示させていますが、個別記事のサイドバーにもB,B1,B2,B3とメニューを表示させたい。

    下記のコードだと、
    親/子ページのタイトルを全て表示させることはできるのですが、
    子ページがない場合とブログの個別ページのサイドバーには何も表示されません。

    <?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>
      <li><a href="<?php get_permalink($post->post_parent); ?>"><?php echo get_the_title($post->post_parent); ?></a></li>
    
      <?php echo $children; ?>
      </ul>
      <?php } ?>

    現在いるページが子ページを持っているかどうかを判定することはできるのでしょうか?
    また、どうやってブログのページにも同じメニューを表示させればよいのでしょうか?

11件の返信を表示中 - 1 - 11件目 (全11件中)
  • 手前味噌&ひどいコードで申し訳ないのですが、動作としては下記のようなことですか?
    http://www.naviwave.com/blog_w/wp_plugin/page-tree/

    トピック投稿者 lee31

    (@lee31)

    kvexさま

    ページ拝見しました。
    こちらのプラグインですと、現在表示されているページが属する階層以外の階層の親ページも表示されますよね?

    表示させたいのは、現在表示されているページが属する階層のみなのです・・・。

    Aに属するぺーじならA,A1,A2,A3のみ
    Bに属するページならB,B1,B2,B3のみ
    Cなら子ページがないので、Cのタイトル(ページへのリンク付き)のみ
    B3で表示させているブログの個別ページには、B,B1,B2,B3を表示させる

    という具合です。

    現在表示されているページが親ページが子ページかの分岐ですと、
    ブログの個別ページでは表示されないので、
    何かよい方法はないかと思い、投稿させて頂きました。

    プラグインは別の機会に是非使わせてください!
    (ちょうどそのような仕様も考えていたのです!)

    あぁ、親ページも消すんですかぁ
    なるほど・・・

    素朴な疑問ですけど、もしそうなら、別の親からの階層ページって、訪問者はどこから知ることができるんでしょう?
    あ、親ページがどこかでメニュー化されてるってことですかね。

    トピック投稿者 lee31

    (@lee31)

    >あ、親ページがどこかでメニュー化されてるってことですかね。

    はい、その通りです。
    親メニューはヘッダー部分にグローバルメニューとして表示させていますので、
    サイドバーには前の投稿で書いたような動作ができたらいいなと・・・。

    もう少し粘って色々試してみます。
    ページ&ブログのメニュー表示にいつも苦戦してます。。。

    なるほど・・・
    だったら、現在表示してるのが
    ・ページか?
    ・ページだとしたら親ページか?
    ・子だとしたら親のIDは?

    これだけ調べて、wp_list_pagesで全展開でいいということですかね?

    それと、ちょっとさかのぼって読み直したのですが「ページ」という用語がごっちゃになってませんかね?
    「ページ」「ブログのページ」というのは違うものですよね?
    ページに対してツリーを表示させたいとおっしゃってますので、ブログ記事のときに表示しないのはあたりまえではないかと?

    トピック投稿者 lee31

    (@lee31)

    だったら、現在表示してるのが
    ・ページか?
    ・ページだとしたら親ページか?
    ・子だとしたら親のIDは?

    これだけ調べて、wp_list_pagesで全展開でいいということですかね?

    恐らくそうだと思います!

    「ページ」「ブログのページ」というのは違うものですよね?
    ページに対してツリーを表示させたいとおっしゃってますので、ブログ記事のときに表示しないのはあたりまえではないかと?

    紛らわしくてすいません。
    「ページ」「ブログのページ」は別のものです。

    ポートフォリオのサイトを作っているのですが、
    ブログで作品をUPして、そのサムネール一覧をページB3に表示させているのです。
    サムネールをクリックすると作品のブログ個別ページへ辿り着きますので、
    ブログのサイドバーにも表示させたいということです。
    (意味的には、Bに属するページですので)

    言葉で説明するのは難しいですね・・・。

    なるほどそうでしたか。
    となると、前者はさほど難しい話ではないのですが、後者ですね・・・

    固定ページBに、ブログ記事のA~Cがが掲載されているとしたら、そのA~Cをツリーに出せということですよね。
    なんらかのサニタライズが必要っぽいですねぇ。

    サムネール一覧をページB3に表示させている

    B3 に表示させているブログ記事をカテゴリーで分類しているなら
    sidebar.php で

    if ( is_single() && in_category( 123 ) ) {
      /* B,B1,B2,B3を表示 */
    }

    kzさん、ページB3の中にサムネイルを表示させているってスレ主さんがおっしゃっているので、is_singleじゃ拾えないと思いますぅ。

    引用足らずでした。

    サムネールをクリックすると作品のブログ個別ページへ辿り着きますので、
    ブログのサイドバーにも表示させたいということです。

    ブログ個別ページ=記事=single、かなーと。

    トピック投稿者 lee31

    (@lee31)

    kvexさん、kzさん、お返事ありがとうございます。

    ブログ個別ページ=記事=single、かなーと。

    はい、その通りです。
    in_categoryという分岐があるのは知りませんでした!
    上記を参考にさせていただき、現在ここまでたどり着きました。

    <?php
    if (is_page() && $post->post_parent ) {	  //もし子ページなら
       $parent=$post->post_parent;
    } else {
       $parent=$post->ID;
    }
    
    $parent_title = get_the_title($parent);
    $parent_url = get_permalink($parent);
    
    ?>
    
    <ul>
    <?php if ( is_single() && in_category(カテゴリID)){ ?>
    
     /* カテゴリIDのブログ個別ページのサイドバー */
    
    <?php } else if ( wp_list_pages("title_li=&child_of=$parent&echo=0" )){ ?>
    
     /* 子ページを持っている場合のサイドバー */
    
    <?php } else { ?>
    
     /* それ以外(子ページを持たないとき)サイドバー */
    
    <?php } ?>
    
    </ul>

    これで動くかどうかちょっと試してみます。

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