べんりワザ・WordPressのカスタムフィールド(ACF・SCF)

ACFの値が表示されないときのチェックリスト

ACF(SCF)で入力した値がサイトに出ない——関数の取り違え、投稿IDの指定漏れ、フィールド名のミスなど原因を出やすい順に並べたチェックリスト。原因の切り分け方法もあわせて紹介します。

入力したのにサイトに出ない——ACF(SCF)でいちばん多いつまずきです。原因は出やすい順にほぼ決まっているので、上から順に確認していけば大半は数分で切り分けられます。

まず切り分け:値が取れていないのか、出力できていないのか

いきなり原因を探すより、どちら側の問題かを先に決めると早いです。表示したい場所に一時的にこれを置きます。

<?php var_dump(get_field('price')); ?>
  • bool(false)NULLが出た値が取れていない。1〜5を確認
  • 値は出ているのに画面に反映されない出力側の問題。6〜8を確認
  • そもそもvar_dumpの結果すら画面に出ないそのファイルが使われていない。9を確認

1. フィールド名の取り違え(最多)

get_field()に渡すのはラベル(管理画面に見えている日本語)ではなくフィールド名(半角英数)です。「フィールドグループ」の一覧で、ラベルの下に小さく出ている名前を確認します。

  • get_field('価格')
  • get_field('price')

アンダースコアとハイフンの違い(event_date / event-date)、末尾のスペースもよくある落とし穴です。

2. ループの中と外を取り違えている

get_field('price')は「今の投稿の値」を取ります。だからループの外(サイドバー・フッター・アーカイブの見出しなど)では、どの投稿か決まらず空になります。第2引数で投稿IDを渡します。

<?php echo esc_html(get_field('price', 123)); ?>          <!-- 投稿ID指定 -->
<?php echo esc_html(get_field('price', $post->ID)); ?>    <!-- 変数から -->
<?php echo esc_html(get_field('site_tel', 'option')); ?>  <!-- オプションページの値 -->

タームや固定ページの値なら、get_field('name', 'category_5')get_field('name', get_option('page_for_posts'))のように対象を明示します。

3. くり返し・グループの中なのにget_fieldを使っている

くり返しフィールドやグループの中は専用の関数です。ここを間違えると、名前が合っていても静かに空になります。

<?php while (have_rows('faq')) : the_row(); ?>
  <?php the_sub_field('question'); ?>   <!-- ✅ サブ用 -->
  <?php the_field('question'); ?>       <!-- ❌ 空になる -->
<?php endwhile; ?>

グループならget_field('company')['tel']のように箱を開けてから中身です。

べんりワザACFのグループフィールドの出し方グループフィールドの正しい取り出し方はこちら

4. フィールドグループの「表示条件」が合っていない

フィールドグループにはどこに表示するかのルール(投稿タイプ・テンプレート・タクソノミーなど)があります。ここが対象と合っていないと、入力欄そのものが出ていない=値が保存されていない状態になります。

編集画面にその欄が見えているかを、まず目で確認します。見えていないなら、フィールドグループの「設定」→「場所」(表示条件)を見直します。

5. プラグインが無効・別の環境に入っていない

本番へアップしたら消えた、という場合はこれです。テーマのコードは移したのに、プラグインが有効化されていない——get_field()が存在しないためエラーか空になります。

<?php if (function_exists('get_field')) : ?>
  <?php the_field('price'); ?>
<?php endif; ?>

function_exists()で囲んでおくと、プラグイン停止時にサイト全体が落ちるのを防げます。配布・納品するテーマでは特に有効な作法です。

6. 配列を出力しようとしている(「Array」と出る)

チェックボックス・リンク・グループ・くり返し、そして返り値を「画像配列」にした画像フィールドは配列です。the_field()ではそのまま出せません。

<?php $link = get_field('button'); ?>
<a href="<?php echo esc_url($link['url']); ?>"><?php echo esc_html($link['title']); ?></a>
べんりワザACFフィールド別・表示の書き方早見表どのフィールドが何を返すかは早見表で確認できます

7. 「0」や「空文字」の判定でつまずいている

if (get_field('stock'))は、値が0のときも「無い」扱いになります。在庫0や「0円」を表示したいときは、明示的に比較します。

<?php $stock = get_field('stock'); ?>
<?php if ($stock !== '' && $stock !== null) : ?>
  <p>在庫:<?php echo esc_html($stock); ?></p>
<?php endif; ?>

8. サブループのあと、後始末を忘れている

WP_Querythe_post()で別の投稿を回したあと、wp_reset_postdata()を呼び忘れると、そのあとのget_field()が別の投稿を指したままになります。「一覧の下だけ値がおかしい」ときはここを疑います。

<?php $q = new WP_Query(['posts_per_page' => 3]); ?>
<?php while ($q->have_posts()) : $q->the_post(); ?>
  <?php the_title(); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>   <!-- ← これ -->
べんりワザループの外で投稿を取得する方法(WP_Query)サブループの正しい書き方と後始末はこちら

9. そのテンプレートファイルが使われていない

編集しているファイルが、実はそのページの担当ではないパターンです。先頭に目印を置くのが確実な確認方法です。

<?php echo '★single.php'; ?>

これが画面に出なければ、テンプレート階層の別のファイル(single-shohin.phppage-about.phpindex.phpなど)が使われています。使われているファイルの名前は、テーマの構成とURLの種類から逆算します。

テーマ開発テンプレート階層——URLごとに担当ファイルが決まるどのURLでどのファイルが使われるかはテンプレート階層の回で

10. キャッシュが残っている

キャッシュ系プラグインやサーバー側のキャッシュ、CDNが古いHTMLを返していることがあります。シークレットウィンドウで開く・キャッシュを削除するで切り分けられます。管理画面では出るのにサイトでは出ない、直したのに変わらない——この2つが典型的なサインです。

まとめ

  1. 最初にvar_dump(get_field('名前'))で、取れていない側か出せていない側かを切り分ける
  2. 取れていないならフィールド名・投稿IDの指定・サブ用関数・表示条件・プラグインの5点
  3. 出せていないなら配列・0の判定・wp_reset_postdata()の3点
  4. 何も出ないならそのテンプレートが使われていないか、キャッシュを疑う

順番に見ていけば必ずどこかで引っかかります。あてずっぽうに直すより、切り分けから入るのがいちばん速い道です。

よくある質問

ACFの値が何も表示されません。まず何を確認すればいいですか?
そのフィールド名を直接var_dumpして、値が取れているかどうかを切り分けます。var_dump(get_field('price')); でfalseやnullなら「値が取れていない側」の問題(名前・投稿ID・プラグイン)、値が出ているのに画面に出ないなら「出力側」の問題(if文やテンプレートの取り違え)です。
一覧ページやサイドバーだと値が取れません
ループの外ではどの投稿の値か決まらないため、第2引数に投稿IDを渡します。get_field('price', $post_id)のように書きます。オプションページの値ならget_field('name', 'option')です。
管理画面には入力できているのに、サイトに出ません
テンプレートファイルが実際に使われているかを確認します。編集しているファイルの先頭に一時的にechoを入れて、画面に出るかを見てください。出なければテンプレート階層の別のファイルが使われています。
get_fieldは使えるのにthe_fieldで「Array」と出ます
そのフィールドが配列を返す種類(チェックボックス・リンク・グループ・画像の配列返しなど)です。中のキーを指定して出力してください。