wordpressのis_home()とis_front_page()という関数の違い

Author:
wordpresslogo

wordpressにおいてトップページかどうか判定する関数にis_home()とis_front_page()ってのがある。
この二つ、非常に分かりづらいのですよね。

というのも個人の設定に依存するので。
今回はそんなお話。

ソースを見れば分かりやすいかもしれないけど、is_front_page()のソースはこうなっている。

	public function is_front_page() {
		// most likely case
		if ( 'posts' == get_option( 'show_on_front') && $this->is_home() )
			return true;
		elseif ( 'page' == get_option( 'show_on_front') && get_option( 'page_on_front' ) && $this->is_page( get_option( 'page_on_front' ) ) )
			return true;
		else
			return false;
	}

下記オプションのラジオボタン部分がshow_on_front、セレクトボックスがpage_on_frontね。
show_on_front
つまりwordpressの表示設定において「フロントページの表示」を「最新のページ」にしている場合はis_front_page()とis_home()は同じ動きします。
でも、「固定ページ」にしている場合、フロントページを設定していないとis_front_page()はfalse返します。
「固定ページ」にしていて投稿ページにした場合、is_home()がtrueを返すのです。

しっかし分かりづらい仕様ですな。
この関数をテーマ上で使うのならpage.phpとhome.php両方用意するのがベターかね。
functions.phpもしくはプラグイン上で使うのならif文に両方書いてORでつなげるのがいいのかもしれないっすな。

自分もたまーにやるけど、トップページだけなにか出したいっていう改造をしたい場合は
ここらへん気をつけるといいですよ。

Share on Facebook
Pocket