054
固定ページが子ページかどうかを判定する
Library
固定ページは親となるページを指定することにより、階層構造を持たせることができます。たとえば、「会社概要という親ページに対して、沿革・組織・社内環境・福利厚生などの子ページを持たせる」といった使い方が考えられます。
子ページかどうかを判定する条件分岐タグは今のところ用意されていません。$postにアクセスし、親のIDが存在するかどうかを調べることで代替します。
| 用例 |
|
|---|---|
| 関連 | |
| Codex |
子ページかどうかを判定する
現在見ているページの内容は、$postグローバル変数に格納されています。$postはWP_Postクラスのインスタンスで、親ページがある場合はpost_parentというメンバ変数に親のIDが保存されています。逆に親ページがない場合は0が入っていますので、この情報を使えば子ページかどうかを確認することができます。
<?php
if ( is_page() && $post->post_parent ) {
// 子ページのときの処理
} else {
// 子ページではないときの処理
}
?>関数内などで使用する場合は、$postのglobal宣言を忘れないようにしてください。
<?php
global $post;
// または
// $post = get_post();
if ( is_page() && $post->post_parent ) {
// 子ページのときの処理
} else {
// 子ページではないときの処理
}
?>ただし、この処理はループ内またはループ後では正しく動作しない場合があります。これは、is_page()関数の制約によるもので、詳しくはこちらのライブラリを参照してください。
また、$postはページによっては存在しない可能性がありますので、先にis_page()を使って固定ページであることを確約しておくことが大切です。固定ページであれば$postは必ず存在します。
なお、上記の関数は子ページかどうかを判定しており、親ページのことは考えていません。親ページも判定したい場合は次のようにするとよいでしょう。
<?php
global $post; // 必要に応じて宣言
if ( is_page() ) {
if( $post->post_parent ) {
// 子ページの場合の処理
} else {
// 親ページの場合の処理
}
} else {
// 固定ページではないときの処理
}
?>子ページかどうかを判定する関数
子ページかどうか確認する機会が多い場合は、functions.phpなどに関数として定義しておくと便利です。
function twpp_is_child_page() {
global $post;
return is_page() && $post->post_parent;
}たとえば次のようにして使います。
通常の使い方
<?php
if( twpp_is_child_page() ) {
// 子ページの場合の処理
} elseif ( is_page() ) {
// 親ページの場合の処理
} else {
// 固定ページではないときの処理
}
?>コロン構文での使い方
<?php if( twpp_is_child_page() ) : ?>
<!-- 子ページの場合の処理 -->
<?php elseif( is_page() ) : ?>
<!-- 親ページの場合の処理 -->
<?php else : ?>
<!-- 固定ページではないときの処理 -->
<?php endif; ?>ただし、is_page()の制約により、ループ内や後で動作は保証されません。
Comment