開発

【初心者向け】WordPressの条件分岐

WordPressにはphpが使われているため、条件分岐というものを駆使して異なる条件に応じて異なるコンテンツを表示することができます。
この記事では、WordPressの条件分岐について詳しく説明します。

条件分岐とは

条件分岐とは、ルールや条件があるときに、その条件に合わせて違うことをするプログラムの考え方です。WordPressでは、ページの種類、カテゴリ、投稿の有無など、さまざまな条件に基づいてウェブサイトに何を表示するか制御できます。

条件分岐の書き方 基本編

まずは、条件分岐の基本的なif構文の書き方を解説していきます。

ifでの条件分岐

<?php if (条件) : ?>
    条件が真の場合に表示されるコンテンツ
<?php endif; ?>

まずはもっともシンプルなif構文です。「1つの条件を満たしていればコンテンツを表示」というものです。

elseでの条件分岐

<?php if (条件) : ?>
    条件が真の場合に表示されるコンテンツA
<?php else : ?>
    条件が偽の場合に表示されるコンテンツB
<?php endif; ?>

2番目にシンプルなif構文です。上記の例で言うと、「条件を満たしていればコンテンツAを表示、満たしていなければコンテンツBを表示」という分岐ができます。

elseifでの条件分岐

複数の異なる条件と複数の異なるコンテンツがある場合に便利です。
条件Xの時はコンテンツA、条件Yの時はコンテンツB、条件Zの時はコンテンツCを表示したいといった場合ですね。
最初に登場した一番シンプルなif構文で記述すると、こうなります。

<?php if (条件X) : ?>
    条件が真の場合に表示されるコンテンツA
<?php endif; ?>
<?php if (条件Y) : ?>
    条件が真の場合に表示されるコンテンツB
<?php endif; ?>
<?php if (条件Z) : ?>
    条件が真の場合に表示されるコンテンツC
<?php endif; ?>

上記のように記述することももちろん可能ですが、elseifを使うことで下記のようにすっきりした見た目にすることができます。

<?php if (条件X) : ?>
    条件が真の場合に表示されるコンテンツA
<?php elseif (条件Y) : ?>
    条件が真の場合に表示されるコンテンツB
<?php elseif (条件Z) : ?>
    条件が真の場合に表示されるコンテンツC
<?php else : ?> <!-- 省略可能 -->
    上記の3つの条件に当てはまらない場合に表示されるコンテンツ <!-- 省略可能 -->
<?php endif; ?>

※ else の部分は「条件と合わなければ」という場合に使う記述なので、省略可能です。

条件分岐の書き方 応用編

条件Xもしくは条件Z(OR)

<?php if (条件X || 条件Z) : ?>
    条件Xもしくは条件Zが真の場合に表示されるコンテンツ
<?php endif; ?>

条件Xかつ条件Z(AND)

<?php if (条件X && 条件Z) : ?>
    条件Xが真で、かつ条件Zが真の場合に表示されるコンテンツ
<?php endif; ?>

条件Xと条件Zが等しい

<?php if (条件X == 条件Z) : ?>
    条件Xと条件Zが等しい時に表示されるコンテンツ
<?php endif; ?>

条件Xと条件Zが等しくない

<?php if (条件X != 条件Z) : ?>
    条件Xと条件Zが等しくない時に表示されるコンテンツ
<?php endif; ?>

条件Xではない

<?php if (!条件X) : ?>
    条件Xもしくは条件Zが真の場合に表示されるコンテンツA
<?php endif; ?>

条件の書き方

先ほどまで「条件X」といれていたカッコ内は、実際に記述するときはこのような書き方になります。

<!-- 固定ページ(スラッグabout)で分岐 -->
<?php if(is_page('about')): ?>
    固定ページ(スラッグabout)で分岐の場合表示されるコンテンツ
<?php endif; ?>

この場合、aboutの部分はシングルクォーテーションで囲う必要があります。

phpでは変数が使えるので、このように書くこともできると頭の片隅に置いておくといいでしょう。

<!-- 固定ページ(スラッグabout)で分岐 -->
<?php 
    $page_slug = 'about'; // 変数$page_slugにaboutを代入
    if(is_page($page_slug)): // 「変数$page_slugのページならば」という条件
?>
        固定ページ(スラッグabout)で分岐の場合表示されるコンテンツ
<?php endif; ?>

WordPressでの使用例

実際にWordPressでよく使う条件分岐を記載します。是非参考にしてみてください。

デフォルトのホームページならば分岐

<?php if(is_front_page() && is_home()): ?>
    デフォルトのホームページの場合表示されるコンテンツ
<?php endif; ?>

デフォルトのホームページでなければ分岐

<?php if(!(is_front_page() && is_home())): ?>
    デフォルトのホームページではない場合表示されるコンテンツ
<?php endif; ?>

投稿アーカイブか、投稿詳細で分岐

<?php if (is_single('post') || is_archive('post')) : ?>
    投稿アーカイブか、投稿詳細で分岐の場合表示されるコンテンツ
<?php endif; ?>

カスタム投稿一覧か、カスタム投稿アーカイブか、カスタム投稿詳細で分岐

カスタム投稿名はtest、タクソノミーはtest_catとします。

<?php if (is_post_type_archive('test') || is_tax('test_cat') || is_singular('test')) : ?>
    カスタム投稿一覧か、カスタム投稿アーカイブか、カスタム投稿詳細で分岐の場合表示されるコンテンツ
<?php endif; ?>

特定のテンプレートを使用していない場合のコンテンツ

テンプレートのファイル名はexample.phpとします。

<?php if(!is_page_template('example.php')) : ?>
    カスタム投稿一覧か、カスタム投稿アーカイブか、カスタム投稿詳細で分岐の場合表示されるコンテンツ
<?php endif; ?>

まとめ

wordpressで条件分岐を使えるようになると便利です。
ページのスラッグを取得して、それとheaderメニューのリンクがと等しければclassを付与するなどの初歩的なことから始まり、組み合わせは無限大です。まずは基礎からコツコツと。楽しくやっていきましょう

アバター画像

r.s

グローワークスのコーダー兼プログラマー。最適なコードでサイトを動かすことに情熱を注いでいます。技術的課題を解決するのが得意です。