ACFでiframeや地図が表示されない?WordPress6.2.7以降の仕様変更と対処法

WordPress

この記事を見ている方は、WordPressサイトでAdvanced Custom Fields(以下 ACF)を使って、GoogleマップやYouTube動画などのiframeコンテンツを埋め込んでいる方で、WordPressがアップデートして表示されなくなっていると思います。

この記事では、ACFのバージョン6.2.7以降で発生する「iframeタグやscriptタグが表示されない問題」の原因と解決策を、わかりやすく解説します。

ACF(Advanced Custom Fields)とは?

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()の使用箇所を確認し、必要に応じて修正しましょう。

この記事を書いた人
管理人

2012年にWebデザインの勉強を始め、2013年より制作会社に勤務。
これまでに500件以上のWebサイト制作・運用に携わってきました。
現在も制作会社に勤務しながら、Webデザインスクールのトレーナーとしても後進の育成に取り組んでいます。
WordPressやデザインの実践的なノウハウを、初心者にもわかりやすく発信できるよう試行錯誤しています。

管理人をフォローする
WordPress
管理人をフォローする

コメント

タイトルとURLをコピーしました