かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress サイトのフロントページにしている固定ページを動的に取得したい

WordPressで企業サイトなどを作っている時に固定ページをフロントページ(サイトトップ)に設定する事も多いと思います。
かなりレアケースな気もしますが、フロントページに設定しているページオブジェクトやページIDが必要になるテーマを作成する時のメモ。
f:id:kikiki-kiki:20161211123954p:plain

固定ページを決め打ちで変更しない場合

他のページでフロントページに紐づく情報が取りたい時に、フロントページが決まっていて変更がないのであれば、get_page_by_path()を使ってフロントページに指定されているページオブジェクトを取得することができます。
例えば、/homeでアクセスできる固定ページをフロントページにしている場合は下記で取得することができます。

<?php
$frontPageObj = get_page_by_path('home');

下記では取得できない。

<?php
$frontPage = get_page_by_path('/'); // => null
$frontPage = get_page_by_path( home_url() ); // => null

get_page_by_path()関数は /home_url() といったサイトのトップのURLを引数にしても、null になってしまいます。
なので、ページのスラッグを固定値で指定しなければならず、フロントページにする固定ページを変更すると、その都度get_page_by_path()関数に渡すスラッグを変更する必要があるので、フロントページが変更される可能性があると少し面倒です。

get_option()でフロントページのページIDを取得できる

get_option( 'page_on_front' ): returns the ID of the static page assigned to the front page
is_home() | Function | WordPress Developer Resources

get_option( 'page_on_front' )フロントページに設定してあるページのIDを取得することが出来るので、下記のコードでフロントページのページオブジェクトを取得することができます。

<?php
$pageID = get_option( 'page_on_front' );
$frontPage = get_post( $pageID );

この方法ならフロントページが変更になっても、変更したページを取得することが可能です。

get_option()で投稿ページに指定しているページIDも取得できる

引数をpage_for_postsにすれば、投稿ページ(home)に指定しているページIDも取得することができます。

<?php
$homeID = get_option( 'page_for_posts' );
$homePage = get_post( $homeID );

 
久しぶりにWordPress案件をしてたので、ページを取得する関数だったget_page()は廃止されて、投稿もページもget_post()で取得できるようになってたの今更を知りましたw


[参考]

小さなお店&会社の WordPress超入門 ―初めてでも安心! 思いどおりのホームページを作ろう!

小さなお店&会社の WordPress超入門 ―初めてでも安心! 思いどおりのホームページを作ろう!