ACF等のカスタムフィールドが空欄の場合の条件分岐と内容の表示方法

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

WordPress

ACF

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

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

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

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

カスタムフィールドの値が空欄かどうかを判定し、値がない場合は非表示、ある場合は適切な内容を表示する方法について解説します。
この処理はWordPressのテンプレートファイルで頻繁に使用される基本的な構文です。

カスタムフィールドが空欄だった時の条件分岐

フィールド名:

コード例

<?php
$ctm = get_post_meta($post->ID, '○', true); // カスタムフィールドの値を取得
if (empty($ctm)): ?>
    <!-- フィールド○が空だった時に表示する内容 -->
    <p>この情報は現在利用できません。</p>
<?php endif; ?>

解説

get_post_meta():

get_post_meta($post->ID, '○', true) を使って、特定の投稿IDからカスタムフィールド の値を取得します。

第3引数を true にすると、単一の値を返します。

empty():

empty($ctm) を使用して、取得した値が空かどうかを判定します。

空欄や nullfalse、未設定のフィールドに対応します。

値がある場合と空欄の場合で異なる表示をする

フィールド名:

コード例

<?php
$ctm = get_post_meta($post->ID, '○', true); // カスタムフィールドの値を取得
if (empty($ctm)): ?>
    <!-- フィールド○が空欄だった場合 -->
    <p>この情報は現在利用できません。</p>
<?php else: ?>
    <!-- フィールド○に値がある場合 -->
    <p><?php echo esc_html($ctm); ?></p>
<?php endif; ?>

解説

if-else:

if (empty($ctm)) でフィールドが空欄の場合の処理を記述。

else でフィールドに値がある場合の処理を記述。

esc_html():

フィールドの値をそのまま出力する場合、esc_html() を使用してセキュリティ対策を行います。

悪意のあるコードが含まれていた場合のXSS攻撃を防ぎます。

実用的な応用例

フィールド値に応じたHTML要素の生成

フィールド名:

<?php
$ctm = get_post_meta($post->ID, '○', true);
if (!empty($ctm)): ?>
    <div class="custom-field">
        <p>情報:<?php echo esc_html($ctm); ?></p>
    </div>
<?php endif; ?>

フィールドが空欄でない場合にのみ特定のHTML構造を出力します。

デフォルト値の設定

フィールド名:

空欄の場合にデフォルトのテキストを表示する例です。

<?php
$ctm = get_post_meta($post->ID, '○', true);
echo !empty($ctm) ? esc_html($ctm) : 'デフォルトの情報';
?>

三項演算子を使用して、値がない場合はデフォルトテキストを出力。

複数のフィールドをチェック

フィールド名:

複数のカスタムフィールドをチェックして、いずれかに値があれば表示します。

<?php
$field1 = get_post_meta($post->ID, '○', true);
$field2 = get_post_meta($post->ID, '△', true);

if (!empty($field1) || !empty($field2)): ?>
    <p>いずれかのフィールドに情報があります。</p>
    <p>Field1: <?php echo esc_html($field1); ?></p>
    <p>Field2: <?php echo esc_html($field2); ?></p>
<?php else: ?>
    <p>どちらのフィールドも空欄です。</p>
<?php endif; ?>

注意点

フィールドが未設定の場合

get_post_meta() は未設定のフィールドに対して空文字列("")を返します。

empty() で十分に対応可能です。

セキュリティ対策

出力するフィールド値には必ず esc_html()esc_attr() を使用してエスケープ処理を行います。

動作確認

テスト環境で、フィールドが空欄と値がある場合の両方をテストして正しい挙動を確認しましょう。

関連の記事

CONTACT

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

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

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