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

投稿日:2024.12.19.
更新日:2025.04.12.

WordPress

ACF

PHP

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

板浪 雅樹
執筆・編集 板浪 雅樹

2005年から WEB 業界一筋。500サイト超を手がける SEO・WordPress のエキスパート。「公開後こそ本番」を掲げ、データ分析とユーザー視点で成果を引き出す運用を提案。

2005年に制作会社へ入社後、プログラマーからキャリアをスタート。サーバー構築・データベース設計で培った技術を強みに、WordPress テーマ/プラグイン開発やサイト移行の難案件を多数担当してきました。
2010年以降は SEO エンジニアとしても活動領域を拡大。コンテンツ設計・内部リンク最適化・高速化チューニングにより、競合の激しいビッグキーワードで上位獲得を実現してきました。
現在は TREVO のウェブディレクターとして、要件定義から運用改善まで一気通貫でリード。AI ライティングや GA4/Looker Studio を活用したレポーティング手法を開発し、「数字で説明できるサイト運用」をポリシーにクライアントの ROI 最大化を支援しています。
趣味/強み:筋トレとランニングで日々の集中力をキープ。複雑な課題を“仕組み”で解決するのが得意。
モットー:「サイトは資産。改善を止めた瞬間から価値は目減りする」

この記事では、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の値が正確に取得できない場合は、返り値のフォーマットを確認してください。

演算子の優先順位

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

テスト環境での動作確認

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

関連の記事

CONTACT

ホームページ制作・Web制作に関するご質問やご相談は、
下記フォームよりお問い合わせください。

無料のお見積りや初回のご相談も承っておりますので、「まだ検討中」「ちょっと話を聞いてみたい」といった段階でも大歓迎です。
現状のホームページ診断も無料で実施中です。

0120-83-8567
平日9:00~18:00まで 定休日:土 日 祝