【2017年最新版】WordPressでよく使うif文条件分岐タグまとめ
WordPressでホームページを制作していると、必要な条件分岐。
if文を使ってコーディングすると、管理しやすく効率的なマークアップで、スッキリしたテンプレートができます。
WordPress制作の中で使う様々なif文をまとめています。
INDEX
よく使う条件分岐タグ
<?php if(is_front_page()): ?> // トップページ判定 <?php if(is_home()): ?> // ブログの投稿一覧ページ判定 <?php if(is_page()): ?> // 固定ページ判定 <?php if(is_single()): ?> // 投稿ページ判定 <?php if(is_category()): ?> // カテゴリー判定 <?php if(in_category()): ?> // カテゴリーに属しているか判定
主な条件分岐です。
これらをそれぞれ詳しく説明していきます。
トップページの条件分岐について
トップページにだけ表示させたい場合使います。使用頻度は一番多いです。
<?php if(is_front_page() || is_home()): ?>
固定ページの条件分岐について
<?php if(is_page()): ?>
<?php if(is_page('カテゴリーID')): ?>
<?php if(is_page('カテゴリースラッグ')): ?>
<?php if(is_page('カテゴリータイトル')): ?>
<?php if(is_page(array(42, 56, 72))): ?>
<?php if(is_page(array('about','policy'))): ?>
<?php if(is_page(array('42', 'about', 'お問合せ'))): ?>
順に説明していきます。
1行目は固定ページ全てを含む条件分岐です。固定ページとして出力する全てのページに対して適用されます。
2行目〜4行目は固定ページの中でも特定のページを指定した条件分岐になります。
ID・スラッグ・タイトルはどれを使っても構いません。どれがよくてどれがよくないということはありませんので、自分の好みで決めてください。
5行目〜7行目は固定ページの中でも特定の複数のページを指定した条件分岐です。
会社概要のページとサービス紹介のページに表示したい、ということがあると思います。
その時にはIDを2つ、またはスラッグを2つ、カンマ区切りで記述します。
7行目のように、ID・スラッグ・タイトルを複合的に記述し条件判定を行うこともできます。
固定ページの条件分岐は以上です。
弊社では記述が少なく済むこと、記述ミスが少ないという理由から、基本的にはIDによる条件分岐を使っています。
条件分岐の数が多い場合にはIDだとどのページを指定しているのかわかりづらくなるので、そんな時にはスラッグやタイトルを用いた方が見分けやすいかもしれません。
記事(投稿)ページの条件分岐について
<?php if(is_single()): ?>
<?php if(is_single('投稿ID')): ?>
<?php if(is_single('投稿スラッグ')): ?>
<?php if(is_single('投稿タイトル')): ?>
<?php if(is_single(array(10, 12, 16))): ?>
<?php if(is_single(array('word', 'text', 'post'))): ?>
<?php if(is_single(array('10', 'word', 'postの仕方'))): ?>
記事(投稿)ページの条件分岐も固定ページと同じ考え方です。
1行目は記事(投稿)ページを全て含む条件分岐なので、カスタム投稿がある場合はその記事にも当てはまるので、注意してください。
2行目〜4行目は記事(投稿)ページの中でも特定のページを指定した条件分岐になります。
ID・スラッグ・タイトルはどれを使っても構いません。どれがよくてどれがよくないということはありませんので、自分の好みで決めてください。
5行目〜7行目は記事(投稿)の中でも特定の複数のページを指定した条件分岐です。
Aという記事とBという記事のみに表示したい、ということがあると思います。
その時にはIDを2つ、またはスラッグを2つ、カンマ区切りで記述します。
7行目のように、ID・スラッグ・タイトルを複合的に混ぜて条件判別を行うこともできます。
カテゴリーの条件分岐について
カテゴリーの条件分岐は
- is_category
- in_category
の2パターンがあります。
is_categoryについて
is_categoryはカテゴリー一覧ページでの条件分岐です。
archive.phpやcategory.phpでカテゴリー一覧を表示させていると、タイトルが違うだけでデザインなどは全て同じになってしまいます。
特定のカテゴリーにのみ表示させたいテキストやデザインがある場合には、is_categoryを使います。
is_categoryを記述するテンプレートは
- archive.php
- category.php
などの記事一覧ページです。
in_categoryについて
それに対してin_categoryはあるカテゴリーに属する記事に対しての条件分岐になります。
スラッグdesignというカテゴリーに属する記事にのみ表示させたいという場合にはin_categoryを使います。
また記事一覧ページのループ内での一記事ずつにも利用できます。
in_categoryを記述するテンプレートは
- single.php
- archive.php category.php でのループ内の記事に対して
使います。
カテゴリー一覧などの記事一覧ページでの条件分岐はis_category、あるカテゴリーに属する記事、記事一覧のループ内での条件分岐はin_categoryを使います。
ではそれぞれの条件分岐を細かく解説していきます。
<?php if(is_category()): ?>
<?php if(is_category('カテゴリーID')): ?>
<?php if(is_category('カテゴリースラッグ')): ?>
<?php if(is_category('カテゴリー名')): ?>
<?php if(is_category(array(10, 12, 16))): ?>
<?php if(is_category(array('word', 'text', 'post'))): ?>
<?php if(is_category(array('10', 'word', 'postの仕方'))): ?>
<?php if(in_category()): ?>
<?php if(in_category('カテゴリーID')): ?>
<?php if(in_category('カテゴリースラッグ')): ?>
<?php if(in_category('カテゴリー名')): ?>
<?php if(in_category(array(10, 12, 16))): ?>
<?php if(in_category(array('word', 'text', 'post'))): ?>
<?php if(in_category(array('10', 'word', 'postの仕方'))): ?>
こちらも固定ページや記事(投稿)ページと同じ考え方です。
それぞれカテゴリーID・カテゴリースラッグ・カテゴリー名を指定できます。
複数のカテゴリーを指定する場合にはarrayで配列を作って使います。
ID・タイトル・タイトルをそれぞれ複合的に指定することもできます。
is_category と in_category をしっかり使い分けるようにしましょう。
カスタム投稿・カスタムタクソノミーの条件分岐について
ホームページのブログ機能が複数必要な場合にはカスタム投稿を使うことがあります。
その時にカスタム投稿で使う代表的な条件分岐を紹介します。
前提条件
- カスタム投稿名【事例】スラッグ【works】
- カスタムタクソノミー名【事例タクソノミー】スラッグ【works_cat】
- ターム名【web制作】スラッグ【web】
とします。
<?php if(( get_post_type() == 'works')): ?>
<?php if(is_tax()) ?>
<?php if(is_tax('web')) ?>
<?php if(is_tax('work_cat',array('web','design','manegement'))) ?>
1行目は事例の一覧ページで使う条件分岐です。
投稿ページとカスタム投稿の一覧ページを同じarchive.phpで表示していたり、共通テンプレート header.php や footer.php などで表示内容を変えたい時に使用します。
2行目〜4行目は特定のタームに属している時に使う条件分岐です。
is_categoryと同じような働きをします。
引数としてスラッグを使い、複数指定するときはまずタクソノミースラッグを指定しarrayで配列を作りタームスラッグで指定します。
カスタム投稿には他にも様々な条件分岐がありますが、上記の条件分岐が使えればほとんど対応できます。
その他条件分岐
特定のテンプレート判別
<?php if(is_page_template('ページテンプレート名')): ?>
1ページ目かどうかを判定
<?php if ( !is_paged() ) : ?>
条件分岐は他にもたくさんありますが基本的にはここまでの内容で対応できるものが多く、理解して入れば他のものも簡単に応用して使えます。
上記では対応できないような条件分岐を探している場合にはこちらのページを参考にしてください。
使い方
ここからは実際の記述方法を紹介していきます。
PHPのif文を理解して入れば簡単です。
if文がわからない場合でもそのままコピペで使えるようにしています。
トップページとそれ以外のページで表示を変える
<?php if(is_front_page() || is_home()): ?> //ここにトップページで表示したい内容を記述 <?php else: ?> //トップページ以外で表示したい内容を記述 <?php endif; ?>
archive.phpで一覧ページとカテゴリーページをまとめて記述する
<?php if(is_archive()): ?> // ここに記事一覧ページに表示させる内容を記述 <?php elseif(is_category()): ?> //ここにカテゴリー一覧記事で表示させる内容を記述 <?php endif; ?>
category.phpで特定のカテゴリーにのみ表示する
//指定カテゴリーが1つの場合
<?php if(is_category('7')): ?>
//カテゴリーID7に表示させたい内容を記述
<?php else: ?>
//それ以外のカテゴリーに表示する内容を記述
<?php endif; ?>
//指定カテゴリーが2つの場合
<?php if(is_category('7')): ?>
//カテゴリーID7に表示させたい内容を記述
<?php elseif(is_category('9')): ?>
//カテゴリーID9に表示させたい内容を記述
<?php else: ?>
//それ以外のカテゴリーに表示する内容を記述
<?php endif; ?>
category.phpで特定のカテゴリーに属する記事にのみ表示する
<?php if(have_posts()): while(have_posts()) the_post(); ?>
//ループ開始
<?php if(in_category('7')): ?>
//ここにカテゴリーID7に属する記事に表示させたい内容を記述
<?php else: ?>
//ここにカテゴリーID7以外に属する記事に表示させたい内容を記述
<?php endif; ?>
//ループ終了
<?php endwhile; endif; ?>
single.phpで特定のカテゴリーに属する記事のみに出力する
<?php if(have_posts()): while(have_posts()): the_post(); ?>
//ループ開始
<?php if(in_category('7')): ?>
//ここにカテゴリーID7に属する記事に表示させたい内容を記述
<?php else: ?>
//ここにカテゴリーID7以外に属する記事に表示させたい内容を記述
<?php endif; ?>
//ループ終了
<?php endwhile; endif; ?>
記事一覧ページなどで1ページ目かどうかを判定
<?php if ( !is_paged() ) : // ?> // 1ページ目に表示させたい内容を記述 <?php else :?> // 2ページ目以降に表示させたい内容を記述 <?php endif; ?>
記述方法自体はほとんどですね。
注意点としてはif() else のあとは 『:』(コロン)
endifの後ろには『;』(セミコロン)であること。
間違えないように注意してください。
まとめ
WordPressを使っていると避けては通れない条件分岐ですが、使いこなせるようになればコーディングの幅が広がり記述を減らし、コーディング時間の短縮、保守の簡易化ができます。
紹介した内容以外にもたくさんの使い方ができるので、調べてみると面白いかもしれません。
使えそうな条件分岐があれば随時追加していきます。
もしこんな場合の条件分岐はどう書けばいいの?なんていうことがあればご連絡ください。
検討したのちに追記していきます。
コンテンツに関する質問やご要望は
より受け付けております。
お気軽にご質問ください。(内容によってはお答えできない場合もございます)
