WEB

この子どこの子!?WordPressでどの固定ページの子孫か判断してみよう。

この子どこの子!?WordPressでどの固定ページの子孫か判断してみよう。

こんにちは。

WordPressの固定ページのお話です。

固定ページは階層構造で作成できることはみなさんご存知かと思います。
子ページとかサブページとか言われてますね。

サブページの詳細は下記をご覧ください。

例えば、あるサブページのテンプレートを編集するとしましょう。

「もしこのサブページの親が、○○のページだったら△△をする」という処理をする際に、「○○のページだったら」の判断が必要になります。

ガンダムでいうと、パイロット(サブページ)が、コアファイター(パイロットの親ページだけど、モビルスーツのサブページ)に乗って、どのモビルスーツ(親ページ)にドッキングしたかを知りたいってことです。

ガンダムにドッキングすると思ってたのに、ガンタンクにドッキングしてた。とかだったら、まあ、いつもより目線が低いからわかるかもしれませんけど、ガンキャノンだったら?(ちなみに、ジムはコアブロックシステムがオミットされてますから、その心配はありません。)

大変ですよね。

気付かずに、近接戦闘しようとしたけどビームサーベルがないとか。

大惨事です。

WordPressもそういうことなんです。

で、判定方法を作ってみました。

function is_originator( $pagename ) {
  if ( is_page() ) { //固定ページである。
    global $post;
    if ( $post->ancestors ) { //誰かのサブページである。
      $root = $post->ancestors[count($post->ancestors) - 1]; //配列の一番後ろが一番上の親。
      $root_post = get_post( $root );
      $name = esc_attr( $root_post->post_name );
      if ( $pagename == $name ) return true;
    }
  }
  return false;
}

これをfunctions.phpに記述します。

で、サブページの中で以下のような感じで記述すると、現在ガンダムとドッキングできてるかどうかわかりますね。

if ( is_child_of( 'RX-78-2' ) ) {
  // 俺がガンダムだ。
}

この記事を書いた人

小林
小林 バックエンドエンジニア 2011年入社
Disappear into the void.