この記事では、WordPress テーマ開発では使わないことはないと言っても過言ではない is_page()
関数について紹介していきます。
is_page() 関数とは
現在表示しているページが固定ページかどうか判断することができます。また、固定ページ ID などを指定することで、任意の固定ページであるかどうかを判断することができます。
パラメーター
$page | 固定ページ ID、タイトル、スラッグまたはそれらの配列 |
使い方
基本的な使い方としては、固定ページであるかどうかを判断することが多いでしょう。以下のように記述することで判断できます。
if ( is_page() ) {
echo "このページは固定ページです。";
} else {
echo "このページは固定ページではありません。";
}
また、特定の固定ページ ID を指定し、その固定ページかどうかを判断することができます。
if ( is_page( 2 ) ) {
echo "この固定ページの ID は 2 です。";
} else {
echo "この固定ページの ID は 2 ではありません。";
}
他にも、タイトルやスラッグ、そしてそれらを配列で指定することで判断することができます。
if ( is_page( 'Sample Page' ) ) {
echo "この固定ページのタイトルは「Sample Page」です。";
} elseif ( is_page( 'blog' ) ) {
echo "この固定ページのタイトルは「blog」です。";
} elseif ( ! is_page( array( 'Sample Page', 'blog' ) ) ) {
echo "この固定ページはタイトルが「Sample Page」、スラッグが blog 以外です。";
}
ループの中で動作しない
以下のコードのようにループの中では、正しく動作しない可能性があります。
if ( have_posts() ) {
// Load posts loop.
while ( have_posts() ) {
the_post();
if ( is_page() ) {
// 何か処理をする
}
}
}
どうしてもループの中で利用したい場合には、一度結果を変数に入れて利用すると良いでしょう。
// 一度 is_page() の結果を $is_page の中に入れる
$is_page = is_page();
if ( have_posts() ) {
// Load posts loop.
while ( have_posts() ) {
the_post();
// 変数 $is_page で条件分岐する
if ( $is_page ) {
// 何か処理をする
}
}
}
ループの後で判定する際にも注意が必要です。ループの後に wp_reset_query()
を入れるとうまく処理できます。
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
}
// wp_reset_query() を入れる
wp_reset_query();
if ( is_page() ) {
// ここで処理
}
}
フック
ありません。
まとめ
このように固定ページかどうかを判断する際によく利用される関数です。
しかし、ループの中で利用したい場合や、ループの後で利用したい場合には、グローバル変数が上書きされるため処理が上手く実行されません。
ですので、上記しているように一工夫すると良いでしょう。