[WordPress] 条件分岐をマスターしよう!

WordPressでサイトを構築していると、「カテゴリー別に記事の一覧を表示」「トップページにのみ特定のコンテンツを表示」「記事の一覧の3番目と4番目の間に広告を自動表示」のようなことをどうしてもやりたくなってしまいますね。
他のサイトを見てみると、自分のサイトにも導入したい機能だらけです。WordPressはプラグインが豊富なので、プラグインだけでも何とかなりますが、自分の思うようなサイトを構築するのであれば、自分でカスタマイズしていったほうが良いです。
カスタマイズする際に重要となるのが「条件分岐」で、これはプログラムでは主役を担う部分になります。
Contents
PHPの条件分岐
WordPressはウェブではよく使われる言語であるPHPで作られていますので、まずはPHPの条件式から学んでみましょう。WordPressの関数(条件式)の表記はPHPとは少し異なる独自のものを採用していますが、PHPの関数(条件式)を理解していれば、書き方が変わっているだけということが良くわかります。
条件分岐の代表とも言えるif文は、指定した条件を満たす場合に処理を実行します。
まず、書式を確認してみましょう。
PHPのif文(条件がひとつの場合)
1 2 3 4 5 6 7 8 9 |
if (条件1) { //条件1に該当した場合の処理を記載 } else { //条件1に該当しない場合の処理を記載 } |
if文は以下のような構文になっています。
さて、実際にプログラムを書いてみましょう。
$a という変数に1を設定します。
$a が1であれば「aの値は1です」、1でなければ「aの値は1ではありません」と表示させるプログラムを作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $a=1; if($a==1){ echo 'aの値は1です'; } else { echo 'aの値は1ではありません'; } |
↓プログラム実行結果
$a=2; と変数 $a の値を変更してプログラムを実行すると「aの値は1ではありません」と表示されるようになります。
PHPのif文(条件が複数の場合)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
if (条件1) { //条件1に該当した場合の処理を記載 } elseif(条件2) { //条件2に該当した場合の処理を記載 } elseif(条件3) { //条件3に該当した場合の処理を記載 } else { //上記のどれにも該当しない場合の処理を記載 } |
複数条件のプログラムを作成してみます。
変数が1であれば「bは1です」
変数が2であれば「bは2です」
変数が3であれば「bは3です」
変数が1〜3以外であれば「bは1,2,3以外です」
と表示させます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php $b=2; if($b==1){ echo 'bは1です'; }elseif($b==2){ echo 'bは2です'; }elseif($b==3){ echo 'bは3です'; }else{ echo 'bは1,2,3以外です'; } ?> |
↓プログラム実行結果
WordPressの条件分岐
さて、PHPのif文のプログラムは理解できたでしょうか?
今度は、WordPressのif文の書式を学んでみましょう。
条件がひとつの場合
1 2 3 4 5 6 7 8 9 |
<?php if(条件1 ): ?> //条件1に該当した場合の処理を記載 <?php else: ?> //条件1に該当しない場合の処理を記載 <?php endif; ?> |
WordPressではHTMLのタグとプログラムが混在する場合が多いので、テンプレート内にHTMLは直接記載、PHP部分は<?php ?> で記載するようになっています。
注意すべき点は「if(条件1 ):」「else:」の最後が「:」(コロン)で終わっているという点です。
このプログラムを実行するのは最後の部分の「;」(セミコロン)になっていますので、それまでの間はプログラムが続いているという意味になります。PHPでは{}で表記していましたが、WordPressではコロン表記になっています。
条件が複数の場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php if(条件1): ?> //条件1に該当した場合の処理を記載 <?php elseif(条件2): ?> //条件2に該当した場合の処理を記載 <?php elseif(条件3): ?> //条件3に該当した場合の処理を記載 <?php else: ?> //上記のどれにも該当しない場合の処理を記載 <php endif; ?> |
実際の利用シーンを考えてみます。
例えば、カテゴリーページでカテゴリー別に表示内容を変更したりする場合にこの分岐が使えます。カテゴリー別にタイトルを画像で作成しておき、カテゴリー毎に別々のタイトル画像を出すなんて感じで使えますね。
プログラムが使えないとカテゴリー別にページを作成することになり、カテゴリー数が多いと酷いことになってしまいますが、プログラムが使えれば1ページで済んでしまいます。
論理演算子
実際にWordPressで条件式を使うときの条件は、上記のような$a=1;などという簡単なものばかりではありません。
「カテゴリー1」と「カテゴリー2」を表示させたいとか、「カテゴリー3」だけは表示させたくないとか、複雑な条件設定がたくさん考えられます。
そこで登場するのが「論理演算子」というものです。
AかつB
AまたはB
A以外
WordPress
WordPressで用意されている条件分岐タグの一覧です。
テンプレートをカスタマイズする場合、これらの条件分岐タグを多用します。
条件分岐タグ | 説明 |
---|---|
is_home() | トップページかどうかを判定。 |
is_single() | 記事ページかどうかを判定。 |
is_page() | 固定ページかどうかを判定。 |
is_category() | カテゴリーページかどうかを判定。 |
is_tag() | タグページかどうかを判定。 |
is_archive() | アーカイブページかどうかを判定。 |
is_paged() | 2ページ目以降かどうかを判定。 |
is_front_page() | フロントページかどうか |
is_date() | 日付のアーカイブページかどうか |
is_singular() | 固定ページ・個別投稿ページ・添付ファイルページのどれか |
is_post_type_archive() | カスタム投稿タイプのアーカイブページかどうか |
is_admin() | ダッシュボードまたは管理画面かどうか |
条件分岐タグ | 説明 |
---|---|
is_search() | 検索結果ページが表示されている場合。 |
is_404() | エラーページが表示されている場合。 |
is_tax() | タクソノミーのアーカイブページが表示されている場合 |
is_post_type_archive() | カスタム投稿のアーカイブページが表示されている場合。 |
is_page_template() | 特定のページテンプレートが表示されている場合。 |
is_date() | 日付別のアーカイブページのいずれかが表示されている場合。 |
is_month() | 月別のアーカイブページが表示されている場合。 |
in_the_loop() | ループ内かどうかをチェック |
関連記事
- [PHP] テンプレート内で解りやすいforeachの使い方
- [WordPress] WordPressの主要ファイルの説明
- [WordPress]カテゴリー情報を表示させてみよう
- [PHP] 現在アクセスしているページのURL・パラメタの取得方法
- [CakePHP] Formでテーブル形式のデータを一括保存する方法