WordPressでページの条件分岐をかけたい時に使用するテンプレートタグのメモです。
条件分岐の基本の書き方
とある条件によって設定や表示を変えたいときに使うのが条件分岐です。
基本のコードはこのような形。
<?php if(条件): ?>
<p>条件に当てはまった場合の処理・表示</p>
<?php elseif(条件): ?>
<p>条件に当てはまった場合の処理・表示</p>
<?php else: ?>
<p>設定した条件以外の場合の処理・表示</p>
<?php endif; ?>
(条件)
のところにテンプレートタグを記載します。
1つの条件の場合の処理・表示だけであれば、elseif や else はなくても大丈夫です。処理内容によって必要なコードを書いていきましょう。
<?php if(条件): ?>
<p>条件に当てはまった場合の処理・表示</p>
<?php endif; ?>
条件に当てはまらない場合のみ記載したい場合、わざわざ if ~ else まで書くのは不要な手間なです。if の部分だけの記述にするために、 if の条件分岐の直前に「!」(エクスクラメーションマーク)をつけると「その条件に当てはまらない場合」という指定になります。
<?php if(!条件): ?>
<p>条件に当てはまらない場合の処理・表示</p>
<?php endif; ?>
とある条件の中に指定したい項目が複数ある場合は array()
という記述を追加します。
<?php if(is_**(array("条件1", "条件2")): ?>
<p>「is_**」の中でさらに"条件1"または"条件2"に当てはまる場合の処理・表示</p>
<?php endif; ?>
TOPページ
is_front_page()
is_home()
主にトップページで使用されるのがこの2つです。ただこの2つは判定方法に違いがあるので使用する場合は注意が必要です。
【設定 > 表示設定】の「ホームページの表示」のところで「固定ページ」を選択している場合、設定している項目によって、is_front_page()
のみがトップページだったり is_home()
だけがトップページだったりします。
【参考】is_home() と is_front_page() の違い・対応表|WordPress | MaryCore
もし意図した通りに条件分岐できない場合は、設定がどうなっているか見直してみましょう。
どちらにも当てはめたい場合は以下のように記述することで設定できます。
<?php if(is_home() || is_front_page()): ?>
<p>条件に当てはまった場合の処理・表示</p>
<?php endif; ?>
投稿詳細ページ
is_single()
is_single()
のようにカッコ内に何もなければ記事の個別ページに当てはまるもの全てになります。カッコ内にIDやスラッグを指定して特定のページを指定することもできます。
<?php if(is_single(1)): ?>
<p>投稿IDが「1」の場合</p>
<?php endif; ?>
<?php if(is_single('sample')): ?>
<p>投稿記事のスラッグが「sample」の場合</p>
<?php endif; ?>
カスタム投稿タイプの指定
is_singular('post_type_name')
カスタム投稿、通常投稿問わず個別ページを指定したい場合は is_single()
で判定できます。
しかし、is_single()
のカッコ内にカスタム投稿名を入れても判別されません。特定のカスタム投稿の個別記事を指定したい場合は is_singular()
というテンプレートタグを使用する必要があります。
<?php if(is_singular('post_type_name')): ?>
<p>「post_type_name」の記事ページの場合</p>
<?php endif; ?>
固定ページ
is_page()
こちらも上記の場合は固定ページ全て。カッコ内にIDやスラッグを指定して特定のページを指定できます。
通常投稿の一覧ページ
アーカイブページか判定
is_archive()
is_archive()
はカテゴリーページやタグページの他、カスタム投稿やタクソノミーページ、日付・投稿者ごとのアーカイブページなど、さまざまな一覧ページが当てはまります。
カテゴリーページか判定
is_category()
タグページか判定
is_tag()
これらも特定のカテゴリー・タグの指定ができます。
カスタム投稿タイプの一覧ページ
is_post_type_archive('post_type')
投稿やカスタム投稿特定の投稿タイプの一覧を判定したい場合に使用します。
引数には「投稿タイプ名」を指定します。複数の投稿タイプの指定もできます。
<?php if(is_post_type_archive('custom_post_type_name')): ?>
<p>投稿タイプが「custom_post_type_name」の場合</p>
<?php endif; ?>
// 複数の投稿タイプ
<?php if(is_post_type_archive(array('post_type1', 'post_type2'))): ?>
<p>投稿タイプが「custom_post_type_name」の場合</p>
<?php endif; ?>
is_post_type_archive() | Function | WordPress Developer Resources
タクソノミー・タームの一覧ページ
is_tax()
タクソノミーの一覧ページであれば上記が当てはまりますが、タームを指定したい場合は以下のように記述します。
is_tax('taxonomy_name', array('term_name'))
一覧の2ページ目以降
is_paged()
2ページ以上に渡って表示される場合の「2ページ目以降」を判定する際に使用します。固定ページが is_page()
なので間違えないように注意しましょう。
日付の一覧ページ
is_date()
is_date()
は、年別・月別・日別アーカイブページのどれかに当てはまれば true を返します。年・月・日、時刻といったそれぞれのページを判定したい場合は以下のテンプレートタグも有効です。
年別
is_year()
月別
is_month()
日別
is_day()
時間別
is_time()
ユーザーページ
is_author()
WordPressに登録されているユーザーのページかどうかを判定します。カッコ内にはIDやナイスネーム、ニックネームが指定できます。ナイスネームは通常ユーザー名と同じです。
検索結果ページ
is_search()
404ページ
is_404()
管理画面ページ
is_admin()
is_admin()
は /wp-admin/
以下全てのページが当てはまります。
その他の個別に条件分岐タグが用意されているページがあります。
ユーザー管理画面・ネットワーク管理画面以外のブログ管理者ページ(/wp-admin/
内)
is_blog_admin()
ユーザー管理画面(/wp-admin/user/
内)
is_user_admin()
ネットワーク管理画面(/wp-admin/network/
内)
is_network_admin()
添付ファイルページ
is_attachment()
ページテンプレート判定
is_page_template()
使用しているテンプレートファイルで判別したい時に利用できるテンプレートタグです。
引数にはテンプレートファイル名を入れます。もしテーマ内のサブフォルダに指定したいファイルがある場合は、フォルダ名も合わせて記載します。
// テーマフォルダの直下に my_page_template.php がある場合
is_page_template('my_page_template.php')
// テーマフォルダの中に template フォルダがあり、その中に my_page_template.php がある場合
is_page_template('template/my_page_template.php')
デバイス判定
wp_is_mobile()
モバイルデバイス(スマホ、タブレット)かどうかの判定します。
カテゴリー : WordPress