WordPressで親ページに子ページリストを、子ページに兄弟ページリストを表示する

wordpress固定ページの親子関係を活かす

こんにちは、Soyです。

WordPressの固定ページでは、親子関係を作ることができます。

ページを階層化するメリットには、

  • 閲覧しているページが何に関連したものかわかりやすい
  • パンくずリストなどで視覚的にサイトの構造が見える
  • 関連したページがあることでクローラが情報を集めやすい(かも?)

などがあります。

親子ページをリスト化して表示しよう

親子ページのリスト化には、ユーザーの離脱を防ぐ目的もあります。

親ページには子ページのリストを、子ページには親ページと兄弟ページのリストを表示することで、ユーザーが関連情報を収集しやすいウェブサイトにしましょう。

親ページで子ページのリストを表示する

今回、WordPressでコーポレートサイトを作ることを仮定します。

「会社概要」を親ページに、「ご挨拶・企業理念・採用情報」などを子ページとして作成しました。

親子関係のあるリンク

functions.phpに、親ページ用の「子ページリスト取得関数」を追加します。

function get_childre_list()
{
    $page_id = get_the_ID(); // 自分(親)のID
    $title = get_post($page_id)->post_title; // 自分のタイトル
    $link = get_permalink($page_id); // 自分のリンク
    $children = wp_list_pages(array( // 子ページのリストの取得
        'title_li' => '', // リストのタイトルを非表示にする
        'child_of' => $page_id, // 自分のIDを指定
        'echo' => '0' // PHPで使うためにHTMLテキストとして返す
    ));
    if ($children) {
        echo '<ul>';
        echo '<li><a href="' . $link . '">' . $title . '</a></li>';
        echo $children;
        echo '</ul>';
    }
}

これで、親 – 子 – 子 – 子…….という順番でリンク付きのリストができます。

親ページのループの中で、

<?php if (have_posts()) : ?>
      <?php while (have_posts()) : the_post(); ?>
            <?php get_children_list(); ?>
      <?php endwhile; ?>
<?php endif; ?>

とすると表示されます。

子ページで親ページと兄弟ページのリストを表示する

子ページには、親と自分の兄弟ページのリンクを表示します。

function get_siblings_link()
{
    global $post;
    $parent_id = $post->post_parent; // 親のID
    $parent_title = get_post($parent_id)->post_title; // 親のタイトル
    $parent_link = get_permalink($parent_id); // 親のリンク
    $siblings = wp_list_pages(array(
        'title_li' => '',
        'child_of' => $parent_id,
        'echo' => '0'
    ));
    if ($siblings) {
        echo '<ul>';
        echo '<li><a href="' . $parent_link . '">' . $parent_title . '</a></li>';
        echo $siblings;
        echo '</ul>';
    }
}

先ほどとほぼ同じですね。

違いは、まず自分の$postから親の情報を取得している点です。

リストの表示も親と同じようにループの中に記述します。

<?php if (have_posts()) : ?>
      <?php while (have_posts()) : the_post(); ?>
            <?php get_siblings_list(); ?>
      <?php endwhile; ?>
<?php endif; ?>

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)