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; ?>用例は随時追加していきたいと思います。
こんな用例が知りたい!という要望があればリクエストをどうぞ。
この記事が役に立ったら「いいね」!
