WordPressサイトの構築でよく使う条件分岐 その2

目次
- 1 新年のご挨拶
- 2 本題に進む前に・・・。
- 3 まず、if文の書き方
- 4 論理演算子を用いると、さらに分岐を指定できる。
- 5 条件分岐タグ
- 6 よく使う条件分岐例のまとめ
- 6.0.1 サイトのホームまたはフロントページの場合に出力する。
- 6.0.2 サイトのホームおよびフロントページ「以外」の場合に出力する。
- 6.0.3 サイトのホームまたはフロントページとそれ以外で出力を分岐する
- 6.0.4 シングルページの場合に出力する。
- 6.0.5 特定のシングルページの場合に出力する。
- 6.0.6 特定のシングルページの場合に出力する。(複数)
- 6.0.7 固定ページの場合に出力する。
- 6.0.8 特定の固定ページの場合に出力する。
- 6.0.9 特定の固定ページの場合に出力する。(複数)
- 6.0.10 特定のカテゴリーのシングルページに表示する
- 6.0.11 特定のカテゴリーのアーカイブページに表示する
- 6.0.12 アーカイブページに表示する
- 6.0.13 ページの種類でコンテンツを分岐する
- 6.0.14 PCかモバイルデバイスからのアクセスでコンテンツを分岐する
- 7 else は省略できる
新年のご挨拶
raisezは本年も「お客様に喜んで頂く」という基本に立ちかえり、ひとつずつ目の前のできることから取り組んで参りたいと存じます。
本題に進む前に・・・。
昨年(一ヶ月前)の記事 WordPressサイトの構築でよく使う条件分岐 にて自分の整理も兼ねてもっとボリュームのある記事を書きます!宣言してしまったので、空いてる時間を見つけて少しづつ書きました!
前回よりは中身のある記事になったと思います。(と言うより前回浅すぎました)
まず、if文の書き方
if〜endif
WordPressはPHPで構成されています。
よってPHPのif文を利用することが出来ます。
条件分岐をさせる基本の構文は「if文」を使います。
if文の中にWordPressの条件分岐タグを指定することで、WordPressサイトを構築する上でそのページで指定した条件に応じた出力を振り分ける事が可能です。
まず基本的な書き方をまとめてみます。
条件Aの場合のみ=出力する
☆if文は「もし~なら」という事です。
☆endifは直前のif文を実行する指定の終わりを指します。
1 2 3 |
<?php if (条件A=この括弧内に条件分岐タグが入る) : ?> 条件Aの場合に出力される内容が入ります。 <?php endif; ?> |
条件Aの場合 と それ以外の場合では出力する
☆elseは「それ以外の場合」になります、直訳でも「他」という意味です。
1 2 3 4 5 |
<?php if (条件A=この括弧内に条件分岐タグが入る) : ?> 条件Aの場合に出力される内容が入ります。 <?php else : //それ以外(その他)の場合 ?> ↑の条件(条件A)ではない場合に出力される内容が入ります。 <?php endif; ?> |
条件Aの場合 と 条件Bの場合で出力する
☆elseifの意味はifとelseの組み合わせです。元のif式の値(例だと条件A)が FALSE(偽=違う) の場合に別の文を実行するif文。またelse文とは異なりelseif式が TRUE(真=合ってる) の場合にのみ代わりの式を実行します。
1 2 3 4 5 |
<?php if (条件A=この括弧内に条件分岐タグが入る) : ?> 条件Aの場合に出力される内容が入ります。 <?php elseif(条件B=この括弧内に条件分岐タグが入る) : //条件Aではなく条件Bの場合 ?> 条件Bの場合に出力される内容が入ります。 <?php endif; ?> |
条件Aの場合 と 条件Bの場合 もしくは それ以外の場合で出力する
今までの組み合わせですが、やっとよく見るif文が出てきた感じです。ちなみにelseifはいくつでも増やして条件を増やす事が出来ます。
1 2 3 4 5 6 7 |
<?php if (条件A=この括弧内に条件分岐タグが入る) : ?> 条件Aの場合に出力される内容が入ります。 <?php elseif(条件B=この括弧内に条件分岐タグが入る) : //条件Aではなく条件Bの場合 ?> 条件Bの場合に出力される内容が入ります。 <?php else : //それ以外(その他)の場合 ?> ↑の条件(条件Aと条件B)ではない場合(それ以外)に出力される内容が入ります。 <?php endif; ?> |
論理演算子を用いると、さらに分岐を指定できる。
2つ以上の条件分岐タグに論理演算子を組み合わせると、上記で書いた条件よりも細かい、というより多様な分岐が可能になります。
論理演算子の種類
(条件A) && (条件B)
説明:条件A および 条件B が共に TRUE の場合に TRUE
(条件A) and (条件B)
説明:条件A および 条件B が共に TRUE の場合に TRUE
(条件A) || (条件B)
説明:条件A または 条件B のどちらかが TRUE の場合に TRUE
(条件A) or (条件B)
説明:条件A または 条件B のどちらかが TRUE の場合に TRUE
!(条件A)
説明:条件A が TRUE でない場合 TRUE
(条件A) xor (条件B)
説明:条件A または条件B のどちらかが TRUE でかつ両方とも TRUE でない場合に TRUE
全部で6種類ありますが、よく見ると「&&」と「and」が同じ意味です、「||」と「or」も同じ意味ですね。これは意味は同じでも優先順位が違うため2通りあると思って下さい。「&&」「||」は「and」「or」よりも優先順位が高いものとなっています。
詳しくはこちら 演算子の優先順位
よく使う論理演算子
WordPressサイト構築でよく使われる論理演算子は下記3種類です。
ひとつずつ用例を上げてみたいと思います。
- (条件A) && (条件B)
- !(条件A)
- (条件A) || (条件B)
実際の用例 (条件A) && (条件B)
「および」より「かつ」のが個人的にしっくりくる。
1 2 3 |
<?php if ( is_single() && is_category('news') ) : ?> シングルページ および(かつ) カテゴリースラッグがnewsのアーカイブページの場合に出力する内容が入ります。 <?php endif; ?> |
実際の用例 !(条件A)
実際の用例 (条件A) && (条件B)を流用すると意味がわかりやすいと思いました。
!(条件A)は否定であり、条件Aではない場合に◯◯〜と指定できるので上記とは逆に「シングルページ および(かつ) カテゴリースラッグがnewsのアーカイブページ「ではない」場合に出力する、と指定することが可能です。
1 2 3 |
<?php if ( !is_single() && !is_category('news') ) : ?> シングルページ および(かつ) カテゴリースラッグがnewsのアーカイブページ「ではない」場合に出力する内容が入ります。 <?php endif; ?> |
実際の用例 (条件A) || (条件B)
(条件A) || (条件B) は条件Aと条件Bのどちらかの条件に当てはまる場合に適用されます。
1 2 3 |
<?php if( is_single( ) || is_page( ) ) : ?> シングルページ または 固定ページの場合に出力する内容が入ります。 <?php endif; ?> |
論理演算子の組み合わせ
論理演算子は組み合わせて使うことも可能です。
下記の例は「ホームページおよびフロントページ」、または「固定ページ」の場合に出力する記述です。
この場合、
is_home() && is_front_page()
↓
( is_home() && is_front_page() )
と条件に括弧を加え1つのかたまりにします。
1 2 3 |
<?php if ( ( is_home( ) && is_front_page( ) ) || is_page( ) ) : ?> 「ホームページおよびフロントページ」、または「固定ページ」の場合に出力する内容が入ります。 <?php endif; ?> |
条件分岐タグ
全部記載すると膨大な量になるので、よく使われるもの以外は割愛します。
詳しくは 条件分岐タグ
is_home()
サイトのトップページ
is_front_page()
サイトのフロントページ(固定ページを設定した場合)
is_single()
シングルページ
is_page()
固定ページ
is_category()
カテゴリーのアーカイブページ
in_category( ‘カテゴリ名もしくはID’ )
シングルページが特定のカテゴリーに属しているか
is_tag()
タグのアーカイブページ
is_archive()
アーカイブページ
is_search()
検索結果ページ
is_404()
404ページ(Not Found)
is_paged()
2ページ目以降が存在するページ
wp_is_mobile()
モバイルデバイスからのアクセスかどうか
よく使う条件分岐例のまとめ
実際よく使う条件分岐タグを使用した例をまとめました。
サイトのホームまたはフロントページの場合に出力する。
1 2 3 |
<?php if ( is_home( ) || is_front_page( ) ) : ?> サイトのホームまたはフロントページの場合に出力する内容が入ります。 <?php endif; ?> |
サイトのホームおよびフロントページ「以外」の場合に出力する。
1 2 3 |
<?php if ( !is_home() && !is_front_page() ) : ?> サイトのホームまたはフロントページ「以外」の場合に出力する内容が入ります。 <?php endif; ?> |
サイトのホームまたはフロントページとそれ以外で出力を分岐する
1 2 3 4 5 |
<?php if ( is_home() || is_front_page() ) : ?> サイトのホームまたはフロントページの場合に出力する内容が入ります。 <?php else : ?> ↑の条件以外のページで出力する内容がはいります。(何もなくても可) <?php endif; ?> |
シングルページの場合に出力する。
1 2 3 4 5 |
<?php if( is_single( ) ) : ?> シングルページの場合に出力する内容がはいります。 <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
特定のシングルページの場合に出力する。
1 2 3 4 5 |
<?php if( is_single('5') ) : ?> //5は任意の投稿IDがはいります。 特定のシングルページの場合に出力する内容がはいります。 <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
特定のシングルページの場合に出力する。(複数)
1 2 3 4 5 |
<?php if ( is_single( array('5','7','10') ) ) : ?> //5、7,10は任意の投稿IDがはいります。 特定のシングルページの場合に出力する内容がはいります。 <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
固定ページの場合に出力する。
1 2 3 4 5 |
<?php if( is_page( ) ) : ?> 固定ページの場合に出力する内容がはいります。 <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
特定の固定ページの場合に出力する。
1 2 3 4 5 |
<?php if( is_page('12') ) : ?> //12は任意の固定ページIDがはいります。 特定の固定ページの場合に出力する内容がはいります。 <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
特定の固定ページの場合に出力する。(複数)
1 2 3 4 5 |
<?php if( is_page( array('12','13','20') ) ) : ?> //12、13、20は任意の固定ページIDがはいります。 特定の固定ページの場合に出力する内容がはいります <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
特定のカテゴリーのシングルページに表示する
1 2 3 4 5 |
<?php if ( in_category(2) ) : ?> //2は任意のカテゴリーIDがはいります。 カテゴリーIDが2に属しているシングルページに出力する内容がはいります <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
1 2 3 4 5 |
<?php if ( in_category( 'information' ) ) : ?> //informationは任意のカテゴリースラッグがはいります。 カテゴリースラッグがinformationに属しているシングルページに出力する内容がはいります <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
特定のカテゴリーのアーカイブページに表示する
1 2 3 4 5 |
<?php if ( is_category(2) ) : ?> カテゴリーIDが2に属しているアーカイブページに出力する内容がはいります <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
1 2 3 4 5 |
<?php if ( is_category( 'information' ) ) : ?> カテゴリースラッグがinformationに属しているシングルページに出力する内容がはいります <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
アーカイブページに表示する
1 2 3 4 5 |
<?php if ( is_archive() ) : ?> アーカイブページに出力する内容がはいります <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
ページの種類でコンテンツを分岐する
1 2 3 4 5 6 7 8 9 |
<?php if ( is_home( ) || is_front_page( ) ): ?> トップページのコンテンツがはいります。 <?php elseif ( is_single( ) ): ?> シングルページのコンテンツが入ります。 <?php elseif ( is_page( ) ): ?> 固定ページのコンテンツが入ります。 <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
PCかモバイルデバイスからのアクセスでコンテンツを分岐する
1 2 3 4 5 |
<?php if ( wp_is_mobile( ) ) :?> モバイルデバイスからのアクセスされた時のコンテンツがはいります。 <?php else: ?> ↑の条件以外のアクセスで出力するコンテンツ(つまりPCからのアクセス) <?php endif; ?> |
else は省略できる
くどすぎるほどに「↑の条件以外のページで出力する内容がはいります(何もなくても可)」と書きましたが、なにもない場合はそもそもelseを使う必要がないので省略してしまっても大丈夫です。
1 2 3 4 5 |
<?php if ( is_category(2) ) : ?> カテゴリーIDが2に属しているアーカイブページに出力する内容がはいります <?php else: ?> ↑の条件以外のページで出力する内容がはいります(何もなくても可) <?php endif; ?> |
↓
1 2 3 |
<?php if ( is_category(2) ) : ?> カテゴリーIDが2に属しているアーカイブページに出力する内容がはいります <?php endif; ?> |
取り敢えず今回の記事はここまでにします。
もう少し踏み込もうかなとも思ったのですが、記事が長くなりすぎると読む人も面倒になりそうなので一旦区切ります。