WordPressでページの種類ごとに条件分岐する方法

2017.12.02 WordPress
WordPressでページの種類ごとに条件分岐する方法

ほぼ自分用のメモですが、よく使うWordPressの条件分岐タグをまとめました。

条件分岐タグをうまいこと使えば、テーマ内のテンプレートファイルを一つにまとめたりできます。

その反面、条件分岐が入り組んでいるとわけが分からなくなることもあるので、そういう場合はテンプレートファイルを別々に作成するなどして、後々の管理に負担がかからないように構成を考えておくといいかと思います。

<?php if ( is_front_page() || is_home() ) : //トップページの場合  ?>
//ここにトップページの場合に表示したいソースを記述
<?php elseif ( is_front_page() ) : //フロントページの場合 ?>
//ここにフロントページの場合に表示したいソースを記述
<?php elseif ( is_home() ) : //ブログ投稿ページの場合 ?>
//ここにブログ投稿ページの場合に表示したいソースを記述
<?php elseif ( is_page() ) : //固定ページの場合 ?>
//ここに固定ページの場合に表示したいソースを記述
<?php elseif ( is_category() ) : //カテゴリーページの場合 ?>
//ここにカテゴリーページの場合に表示したいソースを記述
<?php elseif ( in_category( '5' ) ) : //現在の投稿がカテゴリーID「5」に属する場合 ?>
//ここにカテゴリーID「5」に属する投稿の場合に表示したいソースを記述
<?php elseif ( is_archive() ) : //アーカイブページの場合 ?>
//ここにアーカイブページの場合に表示したいソースを記述
<?php elseif ( is_post_type_archive('foo') ) : //投稿タイプ「foo」のアーカイブページの場合 ?>
//ここに投稿タイプ「foo」のアーカイブページの場合に表示したいソースを記述
<?php elseif ( is_single() ) : //投稿(シングルページ)の場合 ?>
//ここに投稿(シングルページ)の場合に表示したいソースを記述
<?php elseif( is_singular('foo') ) : //カスタム投稿タイプ「foo」に属する投稿の場合 ?>
//ここにカスタム投稿タイプ「foo」に属する投稿に表示したいソースを記述
<?php elseif( is_singular( array( 'foo', 'bar', 'baz' ) ) : //カスタム投稿タイプ「foo, bar, baz」いずれかに属する投稿の場合 ?>
//ここにカスタム投稿タイプ「foo, bar, baz」いずれかに属する投稿の場合に表示したいソースを記述
<?php elseif( is_author() ) : //作成者アーカイブページの場合 ?>
//ここに作成者アーカイブページの場合に表示したいソースを記述
<?php elseif( is_tag() ) : //タグアーカイブページの場合 ?>
//ここにタグアーカイブページの場合に表示したいソースを記述
<?php elseif( is_tax( 'flavor' ) ) : //タクソノミー「flavor」のアーカイブページの場合 ?>
//ここにタクソノミー「flavor」のアーカイブページの場合に表示したいソースを記述
<?php elseif( is_tax( 'flavor', array( 'sharp', 'mild', 'extreme' ) ) ) : //「sharp, mild, extreme」というスラッグのついたタクソノミー「flavor」のアーカイブページの場合 ?>
//ここに「sharp, mild, extreme」というスラッグのついたタクソノミー「flavor」のアーカイブページの場合に表示したいソースを記述
<?php elseif( is_date() ) : //日付別アーカイブページの場合 ?>
//ここに日付別アーカイブページの場合に表示したいソースを記述
<?php elseif( is_search() ) : //検索結果ページの場合 ?>
//ここに検索結果ページの場合に表示したいソースを記述
<?php elseif( is_404() ) : //404ページの場合 ?>
//ここに404ページの場合に表示したいソースを記述
<?php else : //そのほかのページの場合 ?>
//ここに上記いずれにも当てはまらない場合に表示したいソースを記述
<?php endif; ?>

参考ページ:条件分岐タグ

is_front_pageとis_home

違いがよく分からないともっぱら噂のis_front_pageとis_homeですが、この2つの使い分けができるとテーマ制作が非常にラクになります。

is_front_pageは、常にトップページ(フロントページ)に適用されるものです。WordPressダッシュボード「表示設定」にある「ホームページの表示」で「最新の投稿」「固定ページ」のどちらを選択していても、サイトのトップにはここに内容が適用されます。

一方is_homeは、「表示設定」で「固定ページ」を選んだ場合に、「投稿ページ」に適用されるものです。

WordPressでコーポレートサイトなどを構築した場合、サイト内にブログスペースを設けることが多いと思います。ここで言う「投稿ページ」とは、そういう場合のブログトップページのことです。

そのため、「表示設定」で「最新の投稿」を選択している場合には、is_front_pageでもis_homeでも違いはありません。

サイトのトップとブログのトップを分けたい場合(サイト内にブログスペースを設ける場合)には、サイトのトップに適用したいソースはis_front_pageで、ブログのトップに適用したいソースはis_homeで条件分岐するようにします。

なお、サイトトップとブログトップで特に分ける必要がない場合には、下記のようにフロントページでも投稿ページでも適用されるように条件分岐しておくと間違いないかと思います。

<?php if ( is_front_page() || is_home() ) : //フロントページまたは投稿ページの場合 ?>
//ここにフロントページ&投稿ページで表示したいソースを記述
<?php else : //そのほかのページの場合 ?>
//ここに上記いずれにも当てはまらない場合に表示したいソースを記述
<?php endif; ?>

is_categoryとin_category

is_categoryとin_categoryは一文字違いで分かりづらいですが、分岐の条件が大きく違いますので注意が必要です。

双方の役割としては、is_categoryはアーカイブページ(一覧ページ)に、in_categoryは投稿ページ(シングルページ)に使うものです。

is_categoryでカテゴリーIDを指定すると、そのIDのカテゴリーページを表示する際にそのソースが適用されます。

in_categoryでカテゴリーIDを指定すると、現在表示している投稿(シングルページ)が指定したIDのカテゴリ―に属する場合に、そのソースが適用されます。

なお、カテゴリ―ページの場合は「category-カテゴリ―スラッグ.php」という名前でテンプレートファイルを作成すれば、そのカテゴリー専用のテンプレートファイルを作ることができますので、ややこしいと感じる場合には分けて作ってしまってもいいと思います。

柴田竹思

柴田竹思

ベトナム在住Web系フリーランス。有名企業から個人事業まで、いろんなウェブサイトを制作してます。これまで400弱くらい作りました。一年中WordPressばっかりいじってます。

プロフィールはこちら