WordPressでは、
- トップページだけヘッダーを変えたい
- スマホだけ非表示にしたい
など、条件によって設定を変えたい事がよくあります。
これを条件分岐と呼びますが、今回はよく使うもの、もしくは個人的に使う可能性があると思うものだけまとめました。
(有料になっていたらすいません🙇♂️)
WordPress条件分岐の書き方
まずは条件分岐の書き方を解説していきます。
ここの書き方が基本となり、次のセクションの条件分岐タグでも応用出来るのでしっかり押さえておきましょう。
基本的な書き方
まずは基本的な書き方から。if文を使って書きます。
<?php if (条件) : ?>
条件に当てはまる場合の処理
<?php else: ?>
条件に当てはまらない場合の処理
<?php endif; ?>
if文は『もし、〜だったら』という書き方なので、
「もし条件に当てはまったら◯◯、そうでなかったら××」
という書き方になります。
ちなみに条件に当てはまった時の処理だけでよければ、elseは無くても大丈夫です。
<?php if (条件) : ?>
条件に当てはまる場合の処理
<?php endif; ?>
条件が複数ある場合
<?php if (条件1) : ?>
条件1に当てはまる場合の処理
<?php elseif (条件2) : ?>
条件2に当てはまる場合の処理
<?php else: ?>
全ての条件に当てはまらない場合の処理
<?php endif; ?>
- 条件1が当てはまったら条件1に当てはまる場合の処理
- 条件1に当てはまらなかったら条件2へ
- 条件2が当てはまったら条件2に当てはまる場合の処理
- 条件2も当てはまらなかったら全ての条件が当てはまらなかった場合の処理
となります。
ここも全ての条件に当てはまらない場合の処理が不要であれば、<?php else: ?>
は無くても大丈夫です。
また<?php elseif (条件) : ?>
はいくつでも設定可能です。
条件ではない場合
これまでは『もし条件1の場合』という書き方でしたが、『もし条件1ではない場合』という逆の書き方も出来ます。
こちらが通常のif文。
<?php if (条件) : ?>
条件に当てはまる場合の処理
<?php endif; ?>
そしてこちらが条件ではない場合。
<?php if (!条件) : ?>
条件ではない場合の処理
<?php endif; ?>
条件の頭に『 ! 』を付けることで、条件の否定となります。
条件1かつ条件2(AND)
条件1かつ条件2が当てはまる場合の処理はこちら。
<?php if (条件1 && 条件2) : ?>
条件1かつ条件2が当てはまる場合の処理
<?php endif; ?>
またそれぞれの条件の頭に『 ! 』を付けると、条件1かつ条件2が当てはまらない場合の処理となります。
<?php if (!条件1 && !条件2) : ?>
条件1かつ条件2が当てはまらない場合の処理
<?php endif; ?>
条件1または条件2(OR)
条件1または条件2が当てはまる場合の処理はこちら。
<?php if (条件1 || 条件2) : ?>
条件1または条件2が当てはまる場合の処理
<?php endif; ?>
条件1かつ条件2、または条件3の場合(ANDとORの組み合わせ)
ANDとORは組み合わせることも出来ます。
<?php if ( ( 条件1 && 条件2 ) || 条件3 ) : ?>
条件1かつ条件2、または条件3が当てはまる場合の処理
<?php endif; ?>
あまり使う機会はないかも知れませんが参考までに。
条件の指定が複数ある場合
<?php if ( is_page( array( "条件1","条件2","条件3" ) ) ) : ?>
固定ページの条件1と条件2と条件3の処理
<?php else: ?>
固定ページの条件1と条件2と条件3以外の処理
<?php endif; ?>
これは固定ページ(is_page)の例ですが、条件にはページIDやカテゴリーIDなどいろいろあります。
その場合はarray
を使うと条件を複数指定できます。
例えば、固定ページを3ページ分ページIDで指定した場合は以下のようになります。
<?php if ( is_page( array( "10","20","30" ) ) ) : ?>
固定ページのページID10とページID20とページID30の処理
<?php else: ?>
固定ページのページID10とページID20とページID30以外の処理
<?php endif; ?>
条件分岐タグ一覧では省略していますが、よく使うのでぜひ覚えておきましょう。
WordPress条件分岐タグ一覧
それでは先ほど解説した書き方を元に、条件分岐タグを見ていきます。
トップページ
<?php if ( is_front_page() ) : ?>
トップページのみの処理
<?php else: ?>
トップページ以外の処理
<?php endif; ?>
ポイント
・トップページ → front-page.php
・記事一覧 → home.php
としていて、上記の場合だと「トップページまたは記事一覧ページ」となる為、is_front_page() だけにしています。
※ ご自身のトップページの作り方に合わせて変更して下さい。
固定ページ
<?php if ( is_page() ) : ?>
固定ページのみの処理
<?php else: ?>
固定ページ以外の処理
<?php endif; ?>
ポイント
指定した固定ページ
<?php if ( is_page( "ページID" ) ) : ?>
固定ページのみの処理
<?php else: ?>
固定ページ以外の処理
<?php endif; ?>
固定ページのページIDは、ページ名にカーソルを乗せたら左下で確認できます。
記事一覧ページ
<?php if ( is_home() ) : ?>
記事一覧ページのみの処理
<?php else: ?>
記事一覧ページ以外の処理
<?php endif; ?>
ポイント
・記事一覧 → home.php
としているので、記事一覧ページの条件分岐は
is_home()
としています。
個別記事ページ(カスタム投稿の個別記事ページ含む)
<?php if ( is_single() ) : ?>
個別記事ページのみの処理(カスタム投稿含む)
<?php else: ?>
個別記事ページ以外の処理
<?php endif; ?>
ポイント
カスタム投稿の個別記事ページはsingle-◯◯.phpなので、通常の個別記事ページだけでなくカスタム投稿の個別記事ページも含まれます。
個別記事ページ(カスタム投稿の個別記事ページを除く)
<?php if ( is_single() && !is_singular( "カスタム投稿タイプスラッグ" ) ) : ?>
個別記事ページのみの処理(カスタム投稿除く)
<?php else: ?>
個別記事ページ以外の処理
<?php endif; ?>
ポイント
これは、
個別記事ページかつ指定したカスタム投稿の個別記事ページは除く
となります。
カスタム投稿には『 ! 』を付けて否定としています。
カスタム投稿タイプスラッグは以下で確認します(プラグイン『Advanced Custom Fields』使用)
指定した個別記事ページ(カスタム投稿含む)
<?php if ( is_single( "ページID" ) ) : ?>
指定した個別記事ページのみの処理(カスタム投稿含む)
<?php else: ?>
指定した個別記事ページ以外の処理
<?php endif; ?>
ポイント
ページIDの確認方法は固定ページと同じで、投稿タイトルにカーソルを乗せて左下で確認できます。
アーカイブページ
<?php if ( is_archive() ) : ?>
アーカイブページのみの処理
<?php else: ?>
アーカイブページ以外の処理
<?php endif; ?>
ポイント
通常投稿の記事一覧ページ以外のアーカイブページになります。
例)カテゴリー一覧、日付別、タグ別、投稿者別、カスタム投稿記事一覧、カスタム投稿タクソノミー一覧など
カテゴリーページ
<?php if ( is_category() ) : ?>
カテゴリーページのみの処理
<?php else: ?>
カテゴリーページ以外の処理
<?php endif; ?>
ポイント
カスタム投稿のタクソノミー一覧は含みません。
指定したカテゴリーページ
<?php if ( is_category( "カテゴリーID" ) ) : ?>
指定したカテゴリーページのみの処理
<?php else: ?>
指定したカテゴリーページ以外の処理
<?php endif; ?>
カテゴリーIDは『投稿 → カテゴリー』のカテゴリー名にカーソルを乗せたら左下で確認できます。
また、カテゴリーはIDでは無くスラッグでもOKです。
<?php if ( is_category( "カテゴリースラッグ" ) ) : ?>
スラッグはここで確認が出来ます。
この場合は<?php if ( is_category( "info" ) ) : ?>
となりますね。
指定したカスタム投稿の個別ページ
<?php if ( is_singular( "カスタム投稿タイプスラッグ" ) ): ?>
指定したカスタム投稿の個別ページのみの処理
<?php else: ?>
指定したカスタム投稿の個別ページ以外の処理
<?php endif; ?>
カスタム投稿タイプスラッグは以下で確認します(プラグイン『Advanced Custom Fields』使用)
カスタム投稿のアーカイブページ
<?php if ( is_post_type_archive() ) : ?>
カスタム投稿のアーカイブページのみの処理
<?php else: ?>
カスタム投稿のアーカイブページ以外の処理
<?php endif; ?>
指定したカスタム投稿タイプのアーカイブページ
<?php if ( is_post_type_archive( "カスタム投稿タイプスラッグ" ) ) : ?>
指定したカスタム投稿タイプのアーカイブページのみの処理
<?php else: ?>
指定したカスタム投稿タイプのアーカイブページ以外の処理
<?php endif; ?>
カスタム投稿タイプスラッグは以下で確認します(プラグイン『Advanced Custom Fields』使用)
カスタムタクソノミーのアーカイブページ
<?php if ( is_tax() ) : ?>
カスタムタクソノミーのアーカイブページのみの処理
<?php else: ?>
カスタムタクソノミーのアーカイブページ以外の処理
<?php endif; ?>
指定したカスタムタクソノミーのアーカイブページ
<?php if ( is_tax( "タクソノミースラッグ" ) ) : ?>
指定したカスタムタクソノミーのアーカイブページのみの処理
<?php else: ?>
指定したカスタムタクソノミーのアーカイブページ以外の処理
<?php endif; ?>
タクソノミースラッグは以下で確認します(プラグイン『Advanced Custom Fields』使用)
モバイル
<?php if ( wp_is_mobile() ) : ?>
モバイル(スマホ・タブレット)のみの処理
<?php else: ?>
モバイル(スマホ・タブレット)以外の処理
<?php endif; ?>
モバイル(スマホ・タブレット)以外なので、PCでの処理になります。
まとめ
その他、以下のような条件分岐もあります。
- タグページ
- 日付別、月別、年別アーカイブページ
- 作成者ページ
- 検索結果ページ
- 404ページ
この辺は使う機会がほとんどないと思われるので書きませんでしたが、知りたい方は冒頭でも書きましたが以下のCodexでご確認下さい(上記以外にもたくさん種類があります)
条件分岐タグ - WordPress Codex 日本語版
以上になります。