親ページがあるかどうか、というのは公式にも書かれているように $post->post_parent で取得できます。
そこで、固定ページ’東京’を親ページとして、子ページに’渋谷’というページが存在し、どちらもページを見ている場合もTrue(真)にしたい場合はどうしたらいいでしょう。
id: 108
スラッグ: tokyo
子ページ’渋谷’
id: 139
スラッグ: shibuya
例:
1. IDで指定する場合
if ( is_page(108) || $post->post_parent == 108 ) { // 現在のページが固定ページ'東京'か、親ページ'東京"を持つ場合 echo 'True!'; }
IDの場合は上記で可能。
ところが、どちらもスラッグで返そうとすると親ページの方は反応しません。
例:
2. スラッグで指定する場合
if ( is_page('tokyo') || $post->post_parent == 'tokyo' ) { // 現在のページが固定ページ'渋谷'か、親ページ'東京"を持つ場合 echo 'True!'; // 親ページの ID を返したい.....が、[$post->post_parent == 'tokyo']はtrueにならない }
上記の場合、[$post->post_parent == ‘tokyo’]はtrueにならないので条件式は真になりません。
そこでget_the_titleを使えばいけるかもと思ってテストしました。がダメでした。
get_the_title($post->post_parent == '東京') //これもfalse
固定ページの親ページをスラッグで判定する関数
?
そこで、公式のWordPressフォーラムに載っている回答を参考に親ページのスラッグを判定する関数を作成しました。
function is_parent_slug() { global $post; if ($post->post_parent) { $post_data = get_post($post->post_parent); return $post_data->post_name; } }
上記をコピーして、functions.phpに貼り付けます。(作成していない場合は、新しくfunctions.phpを作成します)
これで判別ができるようになりました!
この関数を使いたい固定ページ内で呼び出しましょう。
例:
if (is_page('tokyo')||is_parent_slug() == 'tokyo'){ echo 'True!'; }
これで親ページのIDに関係なく、slug名だけで判定ができました。
「idでいいんじゃ?」
という声が聞こえてきそうですがテスト環境で開発していると本サイトとテストサイトのIDが一緒になるということがまずないのです。
なのでそういうときはスラッグで管理できると非常にラクだったりします。
コメントを残す