【Wordpress】いつもこんがらがるif~else関連のPHP構文をまとめてみました
も・く・じ
ワードプレスサイトをカスタマイズする時、必ずといっていいほどついて回るのがPHPの処理です。
その中でも(個人的に)使用頻度が高いのがif~else文。
Excelなんかでもおなじみの「もし◯◯ならば××せよ。さもなければ△△」っていうヤツです。
これなんですが、書き方がいろいろあっていつも悩んでたんですね。
でもようやくその区別がついてきたので備忘録代わりにここで紹介してみようかと。
PHPを覚えるとかなりラク
何度も言ってますが私はPHPに関しては全くの素人です。
でもそこはこれまでいろいろトライしてきた結果、既存のプログラムをある程度は自分好みになんとかカスタマイズすることができるようにはなってきました。
その中でもよく使うPHP構文が「if~else」です。
これを覚えておくとカスタマイズにかなり役立ちますよ。
例えばPC表示にはPC用の広告スクリプトを、スマホ表示時にはスマホ用にレイアウトされた広告スクリプトを表示させたいなんていうのも簡単にできちゃいます。
あるいは”○○というカテゴリーの記事のみ××を表示させたい”とか、”トップページのみに△△というスクリプトを実行させたい”なんていうのもできちゃいます。
以下、私がこれまで独自に収集してきたif~else絡みのものをさらしてみます。
if~elseの基本文型
もし○○という条件に合致していれば〇〇を実行し、合致してなかった場合は別の〇〇を実行するというif~else条件分岐。
私が知ってる書き方の基本は以下の4つです。
(書き方は微妙に異なりますが挙動は全部同じです)
①
0 1 2 3 4 5 6 7 8 9 |
<?php if(何らかの条件式) { 条件式にあてはまる(TRUE)時に実行されるPHPコードをここに書く } else { 条件式にあてはまらない(FALSE)時に実行されるPHPコードをここに書く } ?> |
②
0 1 2 3 4 5 6 7 8 |
<?php if(何らかの条件式) : 条件式にあてはまる(TRUE)時に実行されるPHPコードをここに書く else : 条件式にあてはまらない(FALSE)時に実行されるPHPコードをここに書く endif; ?> |
※「:」(コロン)や「;」(セミコロン)が混在してるので注意。
③
0 1 2 3 4 5 6 |
<?php if(何らかの条件式) { ?> 条件式にあてはまる(TRUE)時に実行されるPHPコードをここに書く <?php } else { ?> 条件式にあてはまらない(FALSE)時に実行されるPHPコードをここに書く <?php } ?> |
④
0 1 2 3 4 5 6 |
<?php if(何らかの条件式) : ?> 条件式にあてはまる(TRUE)時に実行されるPHPコードをここに書く <?php else : ?> 条件式にあてはまらない(FALSE)時に実行されるPHPコードをここに書く <?php endif; ?> |
※「:」(コロン)や「;」(セミコロン)が混在してるので注意。
私個人としては最後の④が一番しっくりきます。
もしかしたら中に書くPHPのコード次第なのかもしれませんが、その辺のところは既存のコードの書き方をそのまま利用する形ですね。
あとコードは基本的に(スペースも含めて)すべて半角英字です。
全角を使うとエラーになってサイトがきちんと表示されなくなります。
(半角)スペースに関してはあってもなくてもいいみたいです。
要は見た目の問題(見やすさ優先でスペースを入れるなど)みたいです。
スペースではなく改行で処理しても問題ないです。
ただし”<?phpの後ろは必ず半角スペース”といったように必ずスペースを入れなきゃならないところもあったりします。
つまり<?php else : ?>を例に挙げると、
<?phpelse : ?>はダメだけど、
<?php else:?>はOK。
<?php
else :
?>
これもOKです。(確かこれで間違ってなかったと思うのだが)
if~else→if~elseifへの派生文型
上記は二者択一でしたが、三者択一とか四者択一なんてときもあります。
そんな時はelseブロックの前にelseifブロックを足してやります。
例えば先ほどの①の書き方に条件式がさらに一つ加わった場合は次のようになります。
0 1 2 3 4 5 6 7 8 9 10 11 12 |
<?php if(何らかの条件式1) { 条件式1にあてはまる(TRUE)時に実行されるPHPコードをここに書く } elseif(何らかの条件式2) { 条件式1にはあてはまらず(FALSE)、条件式2にあてはまる(TRUE)時に実行されるPHPコードをここに書く } else { どちらの条件式にあてはまらない(すべてFALSE)時に実行されるPHPコードをここに書く } ?> |
条件式がさらに増えるようならその分だけelseifブロックを足してやればいいだけです。
②③④に関しても、同じようにelseif文を必要な分だけ足してあげればOK。
PCとスマホで条件分岐
たとえばアドセンス広告をPCとスマホで別々の固定レイアウト(ここではPCなら横幅728px&スマホなら横幅300px)で表示させたい時は、こんな↓感じで書いてあげます。
(一部伏字にしてあります)
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php if(!is_mobile()): ?> <p>スポンサーリンク</p> <ins class="adsbygoogle" style="display:inline-block;width:728px;height:90px" data-ad-client="ca-pub-xxxxx" data-ad-slot="xxxxx"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <?php else : ?> <p>スポンサーリンク</p> <ins class="adsbygoogle" style="display:inline-block;width:300px;height:250px" data-ad-client="ca-pub-xxxxx" data-ad-slot="xxxxx"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <?php endif; ?> |
1行目の最初の条件式は「!is_mobile()」です。
といっても実はこれはちょっと特殊な書き方になってます。
「!is_mobile()」の”is_mobile()”の部分は「スマホの時は…」という意味なんですが、先頭に「!」が付いて「!is_mobile()」になると「スマホ以外の時は…」という反対の意味になります。
つまり(スマホ以外の)PC表示時(タブレット含む)には728×90pxのアドセンス広告を、それ以外(10行目の<?php else : ?>以降)は、つまりスマホでは300×250pxの広告を表示せよという意味です。
これは「PCの時は…」に該当する適当な条件式がないために「!is_mobile()」という条件式を使ってます。
もちろん「is_mobile()」にして、スマホの時は○○、それ以外は…という書き方でも問題ありません。
どちらを優先するかで書き方が異なってくるだけです。
ちょっとややこしくなりますが、「is_mobile()」という条件式はそもそもワードプレス標準の関数ではなく、テーマ自体に予め設定されてることが前提となります。
これどういうことかというと、ワードプレスには標準で「wp_is_mobile()」という関数が設定されてます。
ところが「wp_is_mobile()」はスマホだけではなくタブレットも含まれます。
ですから”タブレットも含むスマホでは…”で問題なければ「wp_is_mobile()」を使います。
そうではなく、スマホ表示時と(タブレットを含む)PC表示時で分けたいのであれば「is_mobile()」を使います。
ただし先ほども言ったように「is_mobile()」はワードプレス標準のものではないので、テーマ内の(通常は)functions.phpに”function is_mobile() {...”という記述がなされていることが前提になります。
上記の記述(設定)がない場合は「is_mobile()」を使っても何も起こりません。
(※記述内容についてはここでは割愛します)
様々な条件の違いで分岐
他にも様々な条件の違いによって分岐させがこともできます。
(全部は無理なので一部を紹介します)
特定のカテゴリーに属する記事には○○
例えば下の1番目(1行目)の条件式は「カテゴリIDが9に属する記事以外の記事には○○」、2番目(3行目以降)の条件式は「カテゴリIDが9に属する記事には○○」というものです。
0 1 2 3 4 5 6 |
<?php if(!in_category(9)) : ?> <?php echo dfads( 'groups=81&limit=1' ); ?> <?php else : ?> <?php echo dfads( 'groups=80&limit=1' ); ?> <?php endif; ?> |
2行目のコードは”グループ81に属する広告をランダム表示する”という単純に私のサイトでの設定コードの一例です。
カテゴリーIDではなくカテゴリーのスラッグそのものを記述することもできます。
たとえばカテゴリー(スラッグ)が”news”だったとしたら、
<?php if(!in_category('news')) : ?>
と書きます。
もしも複数のカテゴリーを指定したい場合は下の↓ように、配列用のarrayを使い、直後の()の中に複数のカテゴリーIDをカンマで区切って書いていきます。
(もちろんカテゴリースラッグでもOK)
<?php if(!in_category(array(17,37))) : ?>
トップページなら○○
トップページのみの条件分岐であればコチラの↓ように書きます。
0 1 2 |
<?php if(is_home()): ?> |
ただし上の例だと「古い記事」へのリンクをクリックして2ページ目や3ページ目に移動したページも含まれてしまいます。
そうではなくて純粋にトップページだけに限定したいのであればコチラ↓のコードを使います。
0 1 2 |
<?php if(is_home() && !is_paged()): ?> |
”&&”は&の意味です。
is_paged()は2ページ目以降があればという意味なので、!is_paged()であれば1ページ目のみという意味になります。
しかしながらこれがうまく作動しない場合もあるんです。
それがダッシュボード→設定→表示設定で、フロントページの表示を「最新の投稿」ではなく「固定ページ」にしている場合です。
この場合はis_front_page()を使います。
0 1 2 |
<?php if(is_front_page()): ?> |
両方とも使いたいなら、
0 1 2 |
<?php if ( is_home() || is_front_page() ) : ?> |
”||”は or の意味です。
投稿ページなら○○
投稿ページのみという条件分岐ならコチラ↓になります。
0 1 2 |
<?php if(is_single()) : ?> |
記事IDが20の記事のみ○○
特定の記事のみの条件分岐ならコチラ↓のようになります。
0 1 2 |
<?php if(is_single('20')) : ?> |
他にもいろいろありますが、本日はこのくらいで。
記事はお役にたてましたか?
記事に興味をもっていただけたらソーシャルボタンでの共有お願いします^^
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓