php

WordPressで、現在の固定ページが子ページかどうか判別する

WordPressには、is_front_page() 、is_single() など、様々な条件分岐タグが用意されていますが、子ページかどうかを判別するタグはデフォルトでは用意されていないようなので、調べてみたら、WordPress Codex内にいくつかのパターンが説明されていたので、まとめてみます。

パターン1

判別したい箇所に以下を記述

[php]<?php
global $post; // ループ外の場合

if ( is_page() && $post->post_parent ) {
// サブページの場合
} else {
// サブページではない場合
}
?>[/php]

固定ページかどうかの条件分岐タグ(is_page)を使って、ifで判別しています。「固定ページかつ親ページが存在する」場合なら、現在のページはサブページという感じになっていますね。

パターン2

functions.phpに以下を記述

[php]//子ページ判定
function is_subpage() {
global $post; // $post には現在の固定ページの情報があります
if ( is_page() && $post->post_parent ) { // 現在の固定ページが親ページを持つかどうかをチェックします
return $post->post_parent; // 親ページの ID を返します
} else { // 親ページを持たないので…
return false; // …false を返します
};
};
[/php]

パターン1の方法をfunctions.phpに記述して、いつでも使いまわせるようスニペット化しています。if文がTRUEの場合は、親ページのページIDが返されます。

使用方法

判別したい箇所に以下を記述

[php]<?php
if(is_subpage()){
echo "子ページです。";
}else{
echo "子ページではありません。";
}
?>[/php]

このパターン2を応用すれば、子ページの判別に関連することは、大体カバーできそうですね。
他にも親ページのIDが指定したIDと同じかどうか判断するパターンもありましたが、あまり必要性を感じなかったので、省略しました。
気になる方は、WordPress Codexでチェックしてみてください。