この記事を見ている方は、WordPressサイトでAdvanced Custom Fields(以下 ACF)を使って、GoogleマップやYouTube動画などのiframeコンテンツを埋め込んでいる方で、WordPressがアップデートして表示されなくなっていると思います。
この記事では、ACFのバージョン6.2.7以降で発生する「iframeタグやscriptタグが表示されない問題」の原因と解決策を、わかりやすく解説します。
ACF(Advanced Custom Fields)とは?

ACFは、WordPressの投稿や固定ページにカスタム入力フィールドを簡単に追加できる人気プラグインです。
テキストフィールド以外にも、以下のような入力形式を柔軟に扱うことができます。
- ラジオボタン
- チェックボックス
- ファイルアップロード
- 画像、ギャラリー
- Googleマップ埋め込み(iframe)
- 関連記事など
【要注意】ACF6.2.7以降、iframeやscriptタグが表示されない
2024年のアップデートで発生する表示トラブルとは?
ACFバージョン6.2.7(2024年3月リリース)以降、セキュリティ強化の一環として、the_field()
やthe_sub_field()
関数で出力される内容に対して自動でHTMLエスケープ処理が追加されました。
この結果、以下のようなiframeやscriptタグが画面に表示されなくなる事象が発生します。
the_field()
/the_sub_field()
- ACFのショートコード(
[acf field="..."]
など)
- Googleマップのiframe埋め込み
- YouTube動画のiframe埋め込み
- Googleアナリティクスのscriptタグ
- Googleタグマネージャー(GTM)の埋め込みコード
特に地図や動画をACF経由で表示しているサイトにとって、重大な問題です。
WordPress管理画面に警告が出る場合もあります
この変更により、WordPressの管理画面に下記のような通知が表示されることがあります。
⚠️ 一部のフィールドの出力が修正されました
その際は、「Show details(詳細を表示)」をクリックすると、
例えば以下のような情報が表示され、どのフィールドが影響を受けているかがわかります。
google_map_iframe – rendered via the_field
この場合、google_map_iframe
というフィールドが the_field()
経由で出力されているため、今回の自動エスケープの影響を受けているというメッセージです。
対処法
対処法1.the_field()ではなく「echo get_field()」を使う
この問題は、get_field()
で値を取得して、PHPのechoで出力する方法に変更することで解決します。
<!-- 修正前:表示されない -->
<?php the_field('field_name'); ?>
<!-- 修正後:表示される -->
<?php echo get_field('field_name'); ?>
この方法なら、iframeタグやscriptタグもHTMLとしてそのままレンダリングされます。
対処法2.より安全な方法 wp_kses_post() を使う
WordPress公式が推奨するセキュアな方法として、wp_kses_post()
を使うこともできます。
<?php echo wp_kses_post( get_field('field_name') ); ?>
この方法では、iframeやscriptなど一部の危険なHTMLは除外されつつ、一般的なHTMLタグ(pタグやaタグ、imgなど)は出力されます。
- 管理者が入力する信頼できるコンテンツなら
echo get_field()
- 一般ユーザー入力が混在する場合は
wp_kses_post()
を使用
補足:なぜこの変更が行われたのか?
ACF公式によると、HTMLエスケープの追加はXSS(クロスサイトスクリプティング)などの脆弱性対策が目的です。
信頼できないユーザーがiframeやscriptタグを投稿できる環境では、セキュリティリスクがありました。
そのため、今後は「信頼できる用途(例:管理者による埋め込み)」でのみ、echo get_field()
による直接出力を行うことが推奨されます。
まとめ:ACFでiframeや地図が表示されないときのチェックリスト
チェック項目 | 内容 |
---|---|
ACFのバージョンは? | 6.2.7以降なら仕様変更対象です |
出力関数は? | the_field() はHTMLが無効化されます |
修正方法は? | echo get_field() で出力すればOK |
他の影響箇所は? | script、GTM、動画なども確認しましょう |
ACFを使ってiframe地図や動画を表示している場合は、サイト全体でthe_field()
の使用箇所を確認し、必要に応じて修正しましょう。
コメント