大阪のホームページ制作会社 株式会社TREVO
技術ブログ

ACF カスタムフィールドで論理演算を使用した条件分岐

2024.12.19.

WordPress

ACF

PHP

twitter Facebook Pocket LINE はてブ

株式会社TREVOの月額制ホームページ制作サービス
PR

この記事では、ACF(Advanced Custom Fields)の繰り返しフィールドなどで、複数のサブフィールドを条件分岐で組み合わせて表示する方法を解説します。
今回の例では、○○○△△△▼▼▼ のいずれかに情報が入っている場合に内容を表示するサンプルコードを紹介しています。

サンプルケース

○○○△△△▼▼▼ のいずれかに情報が入っている場合に、記述した内容を表示します。

論理和(||)を用いた条件分岐は動作確認済みですが、その他の論理演算については未確認です。
他の論理演算子でも動作すると思われますので、確認でき次第追記していきます。

論理和での条件分岐のコード

フィールド名:○○○
フィールド名:△△△
フィールド名:▼▼▼

<?php if (get_field('○○○') || get_field('△△△') || get_field('▼▼▼')): ?>
    <!-- 表示したい内容 -->
    <p>いずれかのフィールドに値が存在しています。</p>
<?php endif; ?>

解説

get_field('フィールド名')

  • ACFの関数で、指定したフィールドの値を取得します。
  • 値が存在する場合は true を返します。

論理和(||

  • いずれかの条件が true の場合に条件式が true となります。

論理演算子の種類

論理積

名前動作
○ && △論理積○ と △ がともに true の場合に true
○ and △論理積○ と △ がともに true の場合に true

論理和

名前動作
○ || △論理和○ または △ のどちらかが true の場合に true
○ or △論理和○ または △ のどちらかが true の場合に true

|| を推奨

一般的に、|| を使用する方が優先順位を明確にしやすく、直感的です。

or を使用する場合

優先順位の低さを利用したい特別なケースでのみ使います。

否定

名前動作
!○否定○ が true でない場合に true

get_field('△△△') は通常、フィールドに値が存在する場合に true を返し、値が空や未設定の場合に false を返します。
!get_field('△△△') はその値を反転させ、次のように解釈されます。

  • get_field('△△△')false(値がない)の場合、!get_field('△△△')true になります。
  • get_field('△△△')true(値がある)の場合、!get_field('△△△')false になります。
if (get_field('○○○') && !get_field('△△△')) {
    // 実行される処理
}

この条件式は以下のように解釈されます:

  • get_field('○○○')true(○○○ に値がある)。
  • get_field('△△△')false(△△△ に値がない)。

上記の 両方の条件が満たされる場合 に、ブロック内の処理が実行されます。

△△△ に値が入っている場合にメッセージを表示させたい場合

if (get_field('○○○') && !get_field('△△△')) {
    echo 'サブタイトルがあり、説明が設定されていません。';
} elseif (get_field('○○○') && get_field('△△△')) {
    echo 'サブタイトルと説明が両方設定されています。';
}

もし △△△ に値が入っている場合に別のメッセージを表示させたい場合は、elseif を使って分岐を追加します

排他的論理和

名前動作
○ xor △排他的論理和○または△のどちらかがTRUEでかつ両方ともTRUEでない場合にTRUE

応用例

繰り返しフィールドで複数の条件を組み合わせる場合

フィールド名: ○○○
サイズ: △△△
説明文: ▼▼▼

<?php if (get_sub_field('○○○') && (get_sub_field('△△△') || get_sub_field('▼▼▼'))): ?>
    <p>特定の条件を満たしています。</p>
<?php endif; ?>

複雑な条件分岐を組み合わせる

<?php 
if (get_sub_field('○○○') && get_sub_field('△△△')): ?>
    <p>○○○ があり、△△△ が空です。</p>
<?php elseif (get_sub_field('○○○') xor get_sub_field('▼▼▼')): ?>
    <p>○○○ または ▼▼▼ のどちらか一方のみが存在します。</p>
<?php else: ?>
    <p>条件を満たしていません。</p>
<?php endif; ?>

注意点

get_field() の使用

ACFの値が正確に取得できない場合は、返り値のフォーマットを確認してください。

演算子の優先順位

&&|| は優先順位が異なるため、条件式に括弧を適切に使用する必要があります。

テスト環境での動作確認

複雑な条件分岐を利用する際は、テスト環境で動作確認を行ってください。

大阪のホームページ制作会社TREVOでは、ホームページ制作に関する情報を掲載しています。最短2日で仮サイトを公開するサービスやSEO対策に特化したホームページ制作、オリジナルホームページデザイン、ライティング、リスティング広告、WEBマーケティングなどのサービスをご紹介しています。

板浪雅樹 のアバター

経歴: 映像制作の専門学校を卒業後、映像制作(編集・撮影)でのアシスタント、カーナビゲーション用の3DCG制作、PS2用の3DCGゲーム背景制作、16ミリフィルムのデジタル変換業務等を経てWEB制作部門のある会社に就職。株式会社TREVOでディレクション、SEO対策、CMS開発、3DCG制作、映像制作を担当

twitter Facebook Pocket LINE はてブ
WEB無料相談