WordPressのカスタマイズを行う上でなくてはならない条件分岐関数。例えば、出力するシーンを判別する条件分岐関数を例に挙げると以下のようなものがあります。
関数 | 判別 |
---|---|
is_single() | 「投稿」という投稿タイプの個別ページかどうか |
is_page() | 「固定ページ」という投稿タイプの個別ページかどうか |
is_singular() | 指定した投稿タイプの個別ページかどうか |
is_front_page() | トップページかどうか |
is_home() | ブログ一覧(投稿一覧ページ)かどうか |
※他にもこの類の関数はたくさんあります
そして、これらを組み合わせて条件指定する場合は以下のように書きます。
if( is_single() || is_page() ){
投稿または固定ページの個別ページの場合の処理
}
「||」というのは「または」を意味し、「&&」というのは「かつ」を意味するのはご存じですね。
ではフロントページはブログ一覧ではなく固定ページを設定することもあるので、確実に投稿と固定ページの個別ページと指定するため、上の条件に、「かつ、フロントページでなかったら」という条件を加えるとしたらどうでしょう?
例えば以下のように、フロントページでない!なので、頭に「!」を付けて「!is_front_page()」とし、「かつ(&&)」でつなげばよいような気がしますね。
if( is_single() || is_page() && !is_front_page() ){
フロントページを除く投稿または固定ページの個別ページの場合の処理
}
このように書いていませんか?実際にテストしてみると、これではきちんと判別されないのが分かります。
例えば以下のようなコードをテーマのfunctions.phpへ追加して、「投稿」の個別ページ、「固定ページ」の個別ページ、フロントページを開いてみてください。
function pwcn_posttype_view_test(){
if( is_single() || is_page() && !is_front_page() ){
echo '<p>トップページを除く投稿と固定ページで表示されるはず..</p>';
}
}
add_action('wp_head','pwcn_posttype_view_test');
どうでしょう?投稿ページのヘッダー上、固定ページのヘッダー上には表示されますね、ではトップページは除外されてるはず...なのに表示されちゃうんです。
これを解消するには以下の方法があります。
- 除外するものを先に書く
- 関係性のあるものを()で括る
1の方法で書くと以下のようになります。
if( !is_front_page() && is_single() || is_page(){
処理内容
}
2の方法で書くと以下のようになります。
if( ( is_single() || is_page() ) && !is_front_page() ){
処理内容
}
この条件分岐の場合は同じように判別されるようです...。
ようですと書いたのは、1の書き方だと日本語で表せば「フロントページでない、かつ、投稿ページ、または、固定ページ」という条件になるので、まずはフロントページが除外され、投稿か固定ページかが判別されるので、このパターンはうまくいきますが、何だか曖昧な感じもしますね。
では2の書き方を日本語にするとどうでしょう?
数学の()括りと同じで、括弧内のものは両方に掛かるので、「投稿ページ、かつ、トップページではない」または「固定ページ、かつ、トップページではない」という意味になります。
まあWordPressで投稿ページがトップページになることはないのですが、初期の投稿タイプである「投稿」と「固定ページ」のどちらであっても「トップページではない」と明示しておいた方が、仮に将来的にWordPressの仕様変更が起こって投稿ページがトップページにできるようになったとしても(まあないとは思いますが..)確実にトップページは除外できますね。
このように()をうまく使うことで、確実に条件を明示でき、意図しない結果が出てしまうのを防げるので、ご自身のコードで「どうも条件分岐がうまくいってないなぁ..」となった場合にはチェックしてみることをおすすめします。
コメントを残す