is_page(‘スラッグ名’)で分岐させて、内容を変えたい時ハマってしまった。
まず、準備として固定ページを3つほど作成して、それぞれのスラッグをApage、Bpage、Cpageとする。そしてpage.php内に分岐を書こう。
<?php if( is_page('Apage') ): ?> Aです。 <?php elseif( is_page('Bpage') ): ?> Bです。 <?php elseif( is_page('Cpage') ): ?> Cです。 <?php else: ?> その他です。 <?php endif; ?>
この設定で、例えばCページを開けば「Cです。」が標示されます。
この時、管理画面からBページをゴミ箱へ捨てて、ゴミ箱からも完全に削除してみる。
そしてまたCページにアクセスすると……
「Bです。」
が表示されてる!
Aページを開くと、ちゃんと「Aです。」が表示されてる。
分岐の is_page(‘Bpage’) のところでTrueになってしまっているみたい。
再度固定ページを作成し、スラッグを「Bpage」にしてみると、正常に分岐処理されている模様。
調べてみるとどうやら、is_page()の仕様で、空の値を入れるとTrueを返す模様。
関数リファレンス/is page
is_page( ” )
is_page( 0 )
is_page( ‘0’ )
is_page( null )
is_page( false )
is_page( array() )
これらがTrueになるようだが、今回は is_page(‘Bpage’) でTrueになってるみたい。
「現在のページを調べるだけでなく、WP固定ページ全てをチェックし、そのページ存在の有無を判定してしまう結果、is_page( false )と同じになり、trueになってしまう」
こういうことなのだろうか?
いずれにしても、完全に削除する可能性があるページを分岐処理に入れると、忘れて削除した際に思わぬ表示になる可能性があるので注意が必要です。