if文は指定の条件に当てはまるケースとそれ以外で別の処理を行うための構文です。
C言語やJavaScriptなど様々なプログラム言語で使用されますが、ここではWordPressのPHPに特化した形で解説します。
基本の記述方法
まずは基本の記述方法です。
<?php
if(条件式) {
当てはまる場合の処理
} else {
当てはまらない場合の処理
}
?>
下は一度、判定時に一度PHPを抜けて処理をベタ打ちしています。
プログラムに馴染みがない方でも少し理解しやすいでしょう。
<?php if(条件式) { ?>
当てはまる場合の処理
<?php } else { ?>
当てはまらない場合の処理
<?php } ?>
コロン構文
こちらはPHPとHTMLを混在する場合にさらに見やすく記述できます。
<?php if(条件式) : ?>
当てはまる場合の処理
<?php else : ?>
当てはまらない場合の処理
<?php endif; ?>
基本的に結果は同じなので、自分が理解しやすい記述で構わないと思います。
論理演算子
複数の条件を組み合わせる際には論理演算子を使います。
&&
→条件1 かつ 条件2
and
も同じ役割だが、優先順位は&&
>and
if(is_single() || is_tag('WordPress'))
→’WordPress’というタグを持つ投稿
||
→条件1 あるいは 条件2
or
も同じ役割だが、優先順位は||
>or
if(is_page() || is_single())
→ページか投稿
!
→この条件ではない
!is_page()
→固定ページではない
==
→条件1と条件2が等しい
if(条件1 == 条件2)
のように使う
else ifとelseifの違い
それ以外の条件判定には、else if
とelseif
という2つの書き方ができます。
実行結果は同じです。
厳密にはelse if
がわずかに速いとされていますが、通常、気にする必要のない範疇です。
よって、どちらを使用しても構いませんが、コロン記法ではelseif
でないとエラーになる点は注意する必要があります。
WordPressでの条件式
固定ページ
if(is_page())
if(is_page('5'))
やif(is_page('contact'))
のような形でID・スラッグ・タイトルを因数として絞り込みが可能。- 複数指定は
is_page(array(5, 10, 'スラッグ2'))
のようにカンマで区切り。 - IDのシングルクォーテーションは省略可。
投稿
if(is_single())
is_page()
と同じく、if(is_single('125'))
のような形でID・スラッグ・タイトルを因数として絞り込みが可能。- 複数指定は
is_page(array(5, 10, 'スラッグ2'))
のようにカンマで区切り。 - IDのシングルクォーテーションは省略可。
固定ページ もしくは投稿
if(is_page() || is_single())
is_singular()
はカスタム投稿も含めたすべての投稿となる。
トップページ
if ( is_home() || is_front_page())
カスタム投稿
if(is_singular('info'))
- カスタム投稿
info
での指定例。 is_singular()
であることに注意。
カスタム投稿のアーカイブ
if( is_post_type_archive('info'))
- カスタム投稿
info
のアーカイブでの指定例。 - 複数は
array('info','news')
のように指定可能。
アーカイブページ
if(is_archive())
- 日別などすべてのアーカイブ系を含むため、カテゴリーだけを指定する場合は以下の
if(is_category())
を使う
カテゴリーページ
if(is_category())
if(is_category('1','スラッグ','カテゴリ名'))
のように、ID・スラッグ・カテゴリ名を因数として絞り込み、および、複数指定が可能。- IDのシングルクォーテーションは省略可。
タグページ
if(is_tag())
if(is_tag('test','83'))
など、タグ・ID・スラッグを因数として絞り込み、および、複数指定が可能。- IDのシングルクォーテーションは省略可。
検索結果ページ
if(is_search())
404ページ
if(is_404())
作成者ページ
if(is_author())
2ページ目以降
if(is_paged())
- 逆に1ページ目の指定は
!is_paged()
カスタム投稿タイプのアーカイブ
if(is_post_type_archive())
モバイル
if(wp_is_mobile())
- いわゆるスマホ判定です。
アイキャッチ画像
if (has_post_thumbnail())
- アイキャッチ画像の有無を判定します。
プレビューかどうか
if (is_preview())
使用テンプレートでの条件分岐
if (is_page_template('sample.php'))
記事があるかどうか
if(is_category() && have_posts())
- 例えば、カテゴリページでの挙動で記事が存在する場合の条件分岐は
is_category() && have_posts()
となります。
訪問者のIPアドレスで条件分岐
if($_SERVER['REMOTE_ADDR'] === "xxx.xxx.xxx.xxx")
- こちらはPHPのサーバー環境変数を参照しています。
ログインユーザーかどうか
if (is_user_logged_in())
- ログイン状態か否かで別の処理を行えます。
ユーザー権限による条件分岐
if(current_user_can('administrator'))
- ‘administrator’,’editor’,’author’,’contributor’,’contributor’,’subscriber’などの引数で権限を指定できます。
WordPressでよく使う用例集
トップページではサイト名を表示
<?php if ( is_home() || is_front_page() ) : ?>
<?php bloginfo( 'name' ); ?>
<?php endif; ?>
- 用例のように、elseの処理が必要ない場合は
<?php else:?>
は省くことができます。
アイキャッチ画像を表示、なければ代替え表示
<?php if ( has_post_thumbnail() ) : ?>
<?php the_post_thumbnail(); ?>
<?php else: ?>
<img src="<?php echo get_template_directory_uri(); ?>/images/site_image.png" alt="site_image">
<?php endif; ?>
スマホとPCで違う画像を表示
<?php if (wp_is_mobile()) :?>
<img src="<?php echo get_template_directory_uri(); ?>/images/image_mobile.png" alt="mobile_image">
<?php else: ?>
<img src="<?php echo get_template_directory_uri(); ?>/images/image_pc.png" alt="pc_image">
<?php endif; ?>
用例は随時追加していきたいと思います。
こんな用例が知りたい!という要望があればリクエストをどうぞ。