記事内に商品プロモーションが含まれる場合があります
WordPressには「条件分岐」のためのタグがたくさん用意されています。
これらを使うことで「モバイルとパソコンで表示するものを変えたり」「トップページにだけ広告を貼ったりする」ことが可能になります。
1. WordPressでの条件分岐の書き方
はじめに基本的な条件分岐タグの書き方や、注意点をまとめておきます。
1-1. PHPのif文で書く
条件分岐タグは「PHP」というプログラミング言語により書きます。書き方は以下のようになります。
<?php if (条件) : ?>
条件に当てはまるときに表示するものをココに書く
<?php else: ?>
条件に当てはまらないときに表示するものをココに書く
<?php endif; ?>
PHPはHTMLと混ぜて書くことができます。例えば、モバイルとPCで別の文章を表示したいときには、以下のように書きます。
<?php if ( wp_is_mobile() ) : ?>
<p>モバイルからの閲覧時に表示する文</p>
<?php else: ?>
<p>PCからの閲覧時に表示する文</p>
<?php endif; ?>
この中のwp_is_mobile()
というのは、WordPressであらかじめ用意されている条件分岐タグの1つで「モバイル(スマホ・タブレット)から閲覧されているかどうか」という判定をします。この他にも「特定のカテゴリーのときに…」や「トップページのときに…」など色々な種類の条件分岐タグがあるので、のちほどまとめて紹介します。
1-2. elseは省略できる
<?php if ( wp_is_mobile() ) : ?>
モバイルで表示するものをココに書く
<?php endif; ?>
例えば「モバイルだけで表示したい&PCでは何も表示したくない」というときには上記のように<?php else: ?>
を書かなければOKです。
1-3. elseifで細かな条件分岐ができる
<?php if ( is_single() ) : ?>
①記事ページで表示するものをココに書く
<?php elseif ( is_page() ) : ?>
②固定ページで表示するものをココに
<?php else: ?>
①と②のどちらにも当てはまらないときに表示するものをココに
<?php endif; ?>
上のように書くと、1つめのifに当てはまらなかったときに、2つめのelseifの条件を判定してくれるようになります。<?php elseif (条件) : ?>
はいくつ繋げてもOKです。
後ほどきちんと触れますがis_single()
とis_page()
はそれぞれ「記事ページが表示されるときに」、「固定ページが表示されるときに」という条件分岐です。
1-4.「!」で「◯◯でないとき」という意味に
<?php if ( !is_single() ) : ?>
記事ページ以外で表示するものをココに書く
<?php endif; ?>
半角の「!」を条件の関数の前につけることで、否定のifにすることができます。
1-5. 複数の条件を組み合わせることも
ifの括弧()
内では、&&
(ANDの意味)と||
(ORの意味)を使って、2つ以上の条件を組み合わせることができます。
<?php if ( wp_is_mobile() && is_single() ) : ?>
「モバイル」かつ「記事ページ」のときに表示するものをココに書く
<?php endif; ?>
条件を2つとも満たすときに表示する
<?php if ( wp_is_mobile() || is_single() ) : ?>
「モバイル」もしくは「記事ページ」のときに表示するものをココに書く
<?php endif; ?>
1-6. コロンや括弧を書き忘れるとエラーに
PHPでは少しの文法間違いでエラーとなり、ページが表示されなくなってしまいます。
ifとelseifの後にはコロン(:)
if() :
とelseif() :
というように書きます。;
と書くとエラーになります。
endifの後にはセミコロン(;)
endif ;
というように書きましょう。
括弧の数に注意
また「括弧を書き忘れていないか」にも注意しましょう。 (
と)
の数は一致するはずです。
全角で書かない
;
:
?php
などは必ず半角英数字で書くようにしましょう。
1-7. コメントアウトを書いておくと後から分かりやすい
<?php if(略): //◯◯のとき ?>
略
<?php else: //◯◯でないとき?>
略
<?php endif; //◯◯の条件分岐終了 ?>
後から見たときに混乱しないように、:
や;
の後にコメントアウトを書いておくのがおすすめです。PHP文の中では、//
に続けてコメントアウトを書きます(日本語可)。ここに書いたものは、Webサイトを訪れる人が見ることはないので、自分が分かりやすいように書きましょう。
1-8. 条件分岐文は記事内やウィジェット内には書けない
WordPressでは記事本文内にPHPを書くことはできません。つまり、この記事で紹介するような条件分岐文は投稿用のエディタでは使えません。
また、ウィジェット内でもPHPは使うことはできません。
1-9. 主にheader.phpやfooter.phpなどのファイルで使う
ではどこに使うのかというと、WordPressのサイトを構成するファイルであるheader.php
やsidebar.php
、footer.php
、functions.php
などで使用します。一言でいうと、PHPファイル(◯◯.php)内で使えるということですね。
2. WordPressのカスタマイズで便利な条件分岐タグ
ここからはカスタマイズの際に活躍する条件分岐タグを紹介していきます。
ホーム(トップページ)だけ
<?php if ( is_home() || is_front_page() ) : ?>
ホームでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
is_front_page()
も書くことで、固定ページをホームに固定したときにも認識してくれるようになります。トップページでのみ表示させたいものであれば<?php else: ?>
は消してOKです。
ホームの1ページ目だけ
<?php if( ( is_home() || is_front_page() ) && !is_paged() ) : ?>
ホームの1ページ目のみに表示させたいものをココに書く
<?php endif; ?>
さきほどの条件分岐だと、ホームの2ページ目(次の記事一覧)以降でも表示されます。こちらの条件分岐であれば「ホームかつ1ページ目のとき」にのみ表示させることができます。
記事ページだけ
<?php if ( is_single() ) : ?>
記事ページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
固定ページだけ
<?php if ( is_page() ) : ?>
固定ページでのみ表示するものをココに
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
記事ページもしくは固定ページだけ
<?php if( is_singular() ) : ?>
「投稿ページ」もしくは「固定ページ」で表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
厳密に言うと「投稿ページ」「固定ページ」の他に「添付ファイルページ」もこの条件分岐に当てはまります。
特定の記事ページだけ
<?php if( is_single('投稿ID') ) : ?>
指定した記事でのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
投稿IDの調べ方条件分岐させたい記事の投稿編集画面(エディタ)を開いて、ブラウザ上のURLを見ます。?post=の後に続く数字が投稿IDです。
「この記事のときだけは表示するものを変えたい」「この記事のときだけ表示したい」というときに使います。例えば<?php if ( is_single('25') ) : ?>
というように投稿IDを指定します。
特定の記事だけ(複数あるとき)
<?php if( is_single( array('投稿ID','投稿ID','投稿ID') ) ) : ?>
指定した記事でのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
例えば、<?php if( is_single( array('5','15','100') ) ): ?>
とすると「投稿IDが5、15、100のページ」と「それ以外のページ」で表示が切り替えられるようになります。,
の数を増やせば、いくつでもまとめて指定することができます。
特定の固定ページだけ
<?php if( is_page('ページID') ) : ?>
指定した固定ページでのみ表示するもの
<?php else: ?>
それ以外のページで表示するもの
<?php endif; ?>
上の固定ページ版です。固定ページIDも同じく、編集画面のURLで調べられます。
複数あるとき
<?php if( is_page( array('ページID','ページID','ページID') ) ) : ?>
指定した固定ページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
例えば<?php if( is_page( array('1','5') ) ): ?>
というように書きます。
アーカイブページだけ
<?php if( is_archive() ) : ?>
アーカイブページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
アーカイブページとは、①カテゴリー別、②タグ別、③投稿者別、④日付別の記事一覧ページを指します。
アーカイブの1ページ目のみ
<?php if( is_archive() && !is_paged() ) : ?>
アーカイブの1ページ目でのみ表示するものをココに書く
<?php endif; ?>
is_paged()
は「現在表示中のページが2ページ目以降かどうか」を調べるWordPressの関数です。!is_paged()
とすることで、その逆の「1ページ目かどうか」という判定になるわけですね。
カテゴリー別の記事一覧ページのみ
<?php if( is_category() ) : ?>
カテゴリーページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
カテゴリーの1ページ目のみ
<?php if( is_category() && !is_paged() ) : ?>
カテゴリーの1ページ目でのみ表示するものをココに書く
<?php endif; ?>
特定のカテゴリーページのみ
<?php if( is_category('カテゴリーID') ) : ?>
指定したカテゴリーページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
カテゴリー記事一覧ページの中でも「特定のカテゴリーの記事のみ」という条件にしたい場合には上記のように書きます。is_category('wordpress')
のようにカテゴリーのスラッグ名で指定することもできます。
カテゴリーIDの調べ方WordPress管理画面の[投稿][カテゴリー]から条件分岐させたいカテゴリーの詳細ページを開きます。ブラウザ上のURLの中の&tag_ID=の後に続く数字がカテゴリーIDです。
特定のカテゴリーページのみ(複数)
<?php if( is_category( array('カテゴリーID', 'カテゴリーID') ) ) : ?>
指定したカテゴリーページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
複数のカテゴリーをまとめて指定したいときには、array()
の中に半角カンマ,
区切りで書きます。例えばif( is_category( array('1', '3', '6') ) ) :
と書けば「カテゴリーIDが1、3、6の記事一覧ページであれば」という条件分岐になります。また、if( is_category( array('html', 'css', 'php') ) ) :
というようにカテゴリーのスラッグ名で複数指定することもできます。
特定のカテゴリーに属する記事ページのみ
<?php if( in_category('カテゴリーID') ) : ?>
指定したカテゴリーに属する記事でのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
こちらは、カテゴリーページではなく「◯◯カテゴリーの記事ページなら」という条件分岐になります。is_category('5')
ではなくin_category('5')
と書くわけですね。
特定のカテゴリーに属する記事(複数指定)
<?php if( in_category( array('カテゴリーID', 'カテゴリーID') ) ) : ?>
指定したカテゴリーに属するページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
こちらもカテゴリーIDの代わりに、カテゴリーのスラッグ名を書いてもOKです。
カテゴリーごとにデザインを変える方法は別の記事で詳しくまとめました。
タグ別の記事一覧ページのみ
<?php if( is_tag() ) : ?>
タグページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
カテゴリーのときと考え方は同じです。「タグページもしくはカテゴリーページなら」という条件分岐にするにはif ( is_tag() || is_category() ) :
と書きます。
特定のタグの記事一覧ページのみ
<?php if( is_tag('タグID') ) : ?>
指定したタグページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
特定のタグを持つ記事ページのみ
<?php if( has_tag('タグID') ) : ?>
指定したタグを持つ記事ページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
タグIDの代わりにタグのスラッグ名を入れてもOKです。例えば「another
というタグを作って、そのタグがつけられた記事ページだけ表示を切り替える」というようなことができるわけですね。その場合には、if( is_tag('another') ):
と書けばOKです。
日付別の記事一覧ページのみ
<?php if( is_date() ) : ?>
日・月・年別の記事一覧ページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
こちらはアーカイブの記事一覧ページのうち「日付別ページであれば」という指定になります。年別、月別、日別のどれもが含まれます。
年別の記事一覧ページのみ
<?php if( is_year() ) : ?>
年別の記事一覧ページでのみ表示するものをココに書く
<?php endif; ?>
月別の記事一覧ページのみ
<?php if( is_month() ) : ?>
月別の記事一覧ページでのみ表示するものをココに書く
<?php endif; ?>
日別の記事一覧ページのみ
<?php if( is_day() ) : ?>
日別の記事一覧ページでのみ表示するものをココに書く
<?php endif; ?>
著者別の記事一覧ページのみ
<?php if( is_author() ) : ?>
著者別の記事一覧ページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
if( is_author('4') )
というように括弧内にユーザーIDを指定することで、特定の著者の記事一覧ページのみ表示を切り替えることができます。
モバイルとPCで表示切り替え
<?php if ( wp_is_mobile() ) : ?>
モバイルからの閲覧時に表示するものをココに書く
<?php else: ?>
PCからの閲覧時に表示するものをココに
<?php endif; ?>
モバイルというのは「スマホ」だけでなく「タブレット」も含みます。例えばiPadで見たときにはモバイル側に書いたものが表示されるわけですね。
検索結果ページのみ
<?php if ( is_search() ) : ?>
検索ページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
404ページのみ
<?php if ( is_404() ) : ?>
404ページでのみ表示するものをココに書く
<?php else: ?>
それ以外のページで表示するものをココに
<?php endif; ?>
このあたりはあまり使う機会は無いかもしれませんね。