ハシウェブ

Web制作、プログラミングに関する情報を発信するブログ

【WordPress】get_post_ancestorsで固定ページの先祖(祖先)をすべて取得する方法

【WordPress】get_post_ancestorsで固定ページの先祖(祖先)をすべて取得する方法

「WordPressでパンくずリストを自作、カスタマイズしたい」

「固定ページで親要素をすべて取得するかんたんな方法はないの?」

悩み

こんな悩みにお答えします。

じつは、「get_post_ancestors」を使うと、多階層化した固定ページの親ページを配列で取得できます。

なぜなら、

この記事では、以下のことについて解説しています。

  • get_post_ancestorsの使い方
  • パンくずリストをつくるときの使い方

記事を読み終えると、

目次
  1. get_post_ancestorsの使い方
    1. 基本
    2. パンくずリストをつくるときの使い方
  2. まとめ

get_post_ancestorsの使い方

基本

現在のページの投稿IDをget_post_ancestors()の引数に指定します。
これだけで親ページの投稿IDが配列で取得できます。

<?php
  $ancestors = get_post_ancestors( $post->ID );
?>

例えば、現在のページの投稿IDが「3」、親ページ「2」、祖先ページ「1」となっている場合、以下のようになります。

<?php
  //引数を「3」とする
  $ancestors = get_post_ancestors( 3 );

  //結果は配列で取得されます
  var_dump( $ancestors );
  //結果:array( 2,1 )
?>

現在のページに近い祖先ページから順番に配列に格納されます。

実際に使うときはforeachなどで順番に取得、出力させていくことになります。

パンくずリストをつくるときの使い方

基本の使い方をふまえパンくずリストで使えるようにしていきます。

<?php
  if( is_page() ){
    $page = get_post( get_the_ID() );
    $title = $page->post_title;

    //親ページがあるとき
    if( $post->post_parent ){
      $ancestors = get_post_ancestors( $id );
      $ancestors = array_reverse( $ancestors );

      foreach( $ancestors as $value ){
        $breadcrumb[] = array( "item" => get_page_link( $value ), "name" => get_the_title( $value ) );
      }
      $breadcrumb[] = array("item" => "", "name" => $title);

    //親ページがないとき
    }else{
      $breadcrumb[] = array("item" => "", "name" => $title);
    }
  }
?>

固定ページのときに限定します。

  if( is_page() ){

  }

親ページがあるときのみに限定します。

  if( $post->post_parent ){

  }

get_post_ancestors関数の引数にそのページの投稿IDを設定します。

  $ancestors = get_post_ancestors( $id );

phpのarray_reverse関数を使って、取得した配列を逆順に並び替えます。

  $ancestors = array_reverse( $ancestors );

foreach文を使って祖先ページすべてをとりだします。
ここではページごとにリンクとタイトルを取得して、もう一度配列に格納します。

関数を使わずにシンプルに祖先ページを取り出すだけのときは、ここでそのまま表示させてもいいです。

  foreach( $ancestors as $value ){
    $breadcrumb[] = array( "item" => get_page_link( $value ), "name" => get_the_title( $value ) );
  }

現在のページを祖先ページに追加します。

  $breadcrumb[] = array("item" => "", "name" => $title);

あとは、HTMLで出力し、CSSでパンくずらしく見た目を調整します。

パンくずリストをまとめて設定する関数については以下のページで解説しています。

WordPressでパンくずリストをカスタマイズする方法 + リッチリザルト対応

WordPressでパンくずリストをカスタマイズする方法を知りたいですか?この記事では、WordPressでパンくずリストをカスタマイズする方法(リッチリザルト対応)、コピペで使えるコードを紹介しています。ぜひご覧ください。

まとめ

WordPressで固定ページの先祖(祖先)をすべて取得する方法について解説しました。

  • get_post_ancestors関数を使う
  • 引数に投稿IDを指定することで、先祖(祖先)ページIDをすべて配列で取得できる
  • array_reverse関数で配列を逆順に並び替える
  • foreach文で先祖(祖先)ページIDをそれぞれ取得する

これで多階層化した固定ページの先祖(祖先)をすべて取得し、パンくずリストをつくることができます。