is_page() – 固定ページかどうか判断する関数/ループの中・後では工夫が必要

投稿日 :

カテゴリー :

この記事では、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() ) {
		// ここで処理
	}
}

フック

ありません。

まとめ

このように固定ページかどうかを判断する際によく利用される関数です。

しかし、ループの中で利用したい場合や、ループの後で利用したい場合には、グローバル変数が上書きされるため処理が上手く実行されません。

ですので、上記しているように一工夫すると良いでしょう。

コーディングや
WordPress開発のリソースが足りない!

オレインデザインでは、デザインデータからの HTML コーディングから WordPress テーマ・プラグイン開発まで幅広くウェブ制作に対応しています。

お気軽にお問い合わせください。

WordPress 6.5.x 対応版を出版しました

WordPress デフォルトテーマ Twenty Twenty-Four を使って、シンプルなブログやポートフォリオサイト、そしてコーポレートサイトを作りながら、ブロックテーマやサイトエディターの基本を理解することができます。