月別アーカイブ
検索

以前、「最近の投稿」に日付を入れる方法を紹介しました。

同じ悩みを持つ方が多かったようで、けっこうなアクセス数がありました。

今回は、ITPK版ページ ウィジェットを作ってみます。

親兄弟ページへのリンク

やりたいことを大雑把に書くと、「現在表示中のページの、親ページと兄弟(姉妹?)ページを表示する」ということです。

準備

まず前提として、ウィジェットに対応したデザインテーマを使っている必要があります。

そして、プラグインが1つ。前回も使ったので、既に入れている人は無視してください。

「PHP Code Widget」は、ウィジェット内でPHPのコードを実行するためのプラグインです。

これを wp_content/plugins にアップロードしてから、管理画面で有効化してください。

ウィジェットを設定

クリックで拡大

WordPressの管理画面で、外観→ウィジェット画面で、PHP Code ウィジェットをサイドバーにドラッグ&ドロップします(図中1)。

そして、タイトルとコードを書きます(図中2)。図は以前の記事の流用なので、中身のタイトルやコードは下記を見てください。

今回はタイトルを「ページ」とします。もちろん好きな文字列でOKです。

コードはこれです。

<ul>
  <li id="pagelist-home"><a href="<?php echo get_option('home'); ?>/">Home</a></li>
  <ul>
<?php
 if ( is_home() || ! is_page() ) {
  wp_list_pages("title_li=&depth=1" );
 } else {
  global $wp_query;
  $page_id = $wp_query->post->ID;
  if ( $wp_query->post->post_parent ) {
    // child page
    $parent_id = $wp_query->post->post_parent;
    wp_list_pages("title_li=&include=".$parent_id );
?>
    <ul>
<?php
    if(wp_list_pages("title_li=&child_of=".$parent_id."&echo=0" )) {
      wp_list_pages("title_li=&child_of=".$parent_id );
    }
?>
  </ul>
<?php
  } else {
    // parent page
    wp_list_pages("title_li=&include=".$page_id );
?>
    <ul>
<?php
    if(wp_list_pages("title_li=&child_of=".$page_id."&echo=0" )) {
      wp_list_pages("title_li=&child_of=".$page_id );
    }
?>
  </ul>
<?php
  }
 }
?>
  </ul>
</ul>

あとは、保存を押せばOK。

大雑把な説明

トップページやブログ記事を表示中(is_home() || ! is_page() )の時は、最上位ページ(depth=1)のリストを表示します。

ページ表示中で、それが子ページ($wp_query->post->post_parent が真)ならば、親ページとその子たち(child_of= $parent_id)、つまり自分の兄弟ページのリストを表示します。

ページ表示中で、それが子ページではない($wp_query->post->post_parent が偽)ならば、自分とその子ページのリストを表示します(child_of= $page_id)。

今後の課題

ページ階層は2階層(親と子)までに対応しています。

孫ページとかその先まではまだ考えていません。

関係ありそうな記事

One Response to “WordPress 表示中ページの親兄弟へリンク”

  • よこちゃん より:

    凄く参考になる記事有り難うございます。

    実は、現在固定ページのみでサイトを制作していて、
    困っていた所貴サイトを見つけました。

    もう少しで自分の実装したかった事に手が届きそうなのですが、
    解決がなかなかできそうにありません。

    もしよろしければ、下記の際どのようにすればよいのか、
    ご教授頂く事はかのうでしょうか。

    ————————————
    現在表示中のページが親ページの場合、
    その親ページに属する子ページの一覧を表示する。

    もし、現在表示中のページが子ページなら、
    兄弟ページ(親ページが同じ)の一覧を表示する(ただし、自分自身は除外する)。
    ————————————

    上記を実装したいのですが、その場合のコードはどうなりますでしょうか。
    何卒どうぞよろしくお願い致します。

コメント