2026年6月25日

2026年6月25日

WordPressの埋め込み(oEmbed)が表示されないときの確認手順と直し方

WordPress では、YouTube などの URL を貼るだけで、動画や投稿が記事の中に表示されます。この仕組みを oEmbed と呼びます。埋め込みにならずに URL やリンクのまま表示されるときは、次の順に確かめると原因を絞り込めます。

  1. URL の貼り方と、そのサービスが WordPress の対応先かどうか
  2. 前回の失敗が保存(キャッシュ)されていないか
  3. サーバーから外部のサービスに接続できるか
  4. ブロックエディターが使う REST API が動いているか
  5. プラグインやテーマが埋め込みを止めていないか

この記事の内容は、WordPress 7.1 のソースコード(wp-includes/class-wp-embed.php、class-wp-oembed.php)と WP-CLI で動作を確かめています(2026年10月時点)。

oEmbed の仕組み

URL が埋め込みに変わるまでの流れは次のとおりです。

  1. WordPress は、URL が登録済みのサービス(プロバイダー)のどれに当たるかを調べる
  2. サーバーからそのサービスの oEmbed 用の窓口に問い合わせ、埋め込み用の HTML を受け取る
  3. 受け取った HTML を投稿のカスタムフィールド(_oembed_ で始まるメタデータ)に保存し、次からはそれを表示する

問い合わせるのは閲覧者のブラウザーではなく、WordPress を動かしているサーバーです。そのため、サーバーの外部通信が止められていると埋め込めません。また、失敗した結果も保存されるため、原因を直した後もリンクのままになることがあります。

1. URL の貼り方と対応サービスを確かめる

URL だけを1行で貼る

  • ブロックエディター: 空の段落に URL だけを貼り付けると、埋め込みブロックに変わります。文章の途中に貼ると、ただのリンクになります。「埋め込み」ブロックや「YouTube」ブロックを追加して URL を入れる方法もあります。
  • クラシックエディター: URL を、前後に文字の無い1行として書きます。URL にリンク(a タグ)を付けていると埋め込みになりません。

対応しているサービスか

WordPress が標準で対応しているサービスは、class-wp-oembed.php に登録されています。WP-CLI が使えるなら、URL が対応先かどうかを次のコマンドで確かめられます。

# 対応先なら、問い合わせ先の URL が表示される
wp embed provider match https://www.youtube.com/watch?v=jNQXAC9IVRw

対応先でない URL では Error: No oEmbed provider found for given URL. と表示されます。よく問題になるものは次のとおりです。

サービス 状況(WordPress 7.1、2026年10月時点)
YouTube 対応。youtube.com/watch、youtu.be、/shorts/、/live/ の形式を登録済み
X(旧 Twitter) twitter.com の URL だけが登録されている。x.com の URL は埋め込まれずリンクになる
Instagram・Facebook WordPress 5.5.2 で標準の対応から外れた。プラグインなどが必要
TikTok・Bluesky など 対応

X の投稿は、URL の x.com を twitter.com に書き換えて貼ると埋め込まれます(例: https://x.com/ユーザー名/status/番号 → https://twitter.com/ユーザー名/status/番号)。Instagram の埋め込みについては、WordPressのInstagram埋め込みが表示されないを参照してください。

2. 保存された失敗(キャッシュ)を消す

一度埋め込みに失敗すると、WordPress は投稿のメタデータに失敗したこと(値は {{unknown}})を保存し、以後はその URL をリンクとして表示し続けます。通信の問題などを直しても、この記録を消すまで表示は変わりません。WordPress 7.1 で、通信を止めた状態で一度表示して失敗を保存させると、通信を戻しても埋め込みにならず、キャッシュを消すと埋め込みに戻ることを確かめています。

WP-CLI で消す

# 投稿 ID 123 に保存された oEmbed のキャッシュをすべて消す
wp embed cache clear 123

消した後に記事を表示すると、もう一度サービスに問い合わせます。

ウィジェットなど投稿以外の場所の埋め込みは、oembed_cache という投稿タイプに保存されます。次のコマンドでその ID を調べ、削除します。

# URL のキャッシュが入っている ID を調べる
wp embed cache find https://www.youtube.com/watch?v=jNQXAC9IVRw

# 表示された ID を削除する(例: 456)
wp post delete 456 --force

phpMyAdmin などで消す

WP-CLI が使えないときは、データベースのメタデータを削除します。実行前にデータベースのバックアップを取ってください。テーブル名の wp_ は、自分のサイトの接頭辞に合わせます。

-- 投稿 ID 123 の oEmbed キャッシュ(_oembed_ と _oembed_time_ で始まるメタデータ)を削除する
DELETE FROM wp_postmeta
WHERE post_id = 123
  AND meta_key LIKE '\_oembed\_%';

3. サーバーから外部に接続できるか確かめる

キャッシュを消しても埋め込めないときは、サーバーがサービスに接続できているかを確かめます。WP-CLI の wp embed fetch は、WordPress と同じ方法で問い合わせます。

# 埋め込み用の HTML が表示されれば、問い合わせは成功している
wp embed fetch https://www.youtube.com/watch?v=jNQXAC9IVRw

Error: There was an error fetching the oEmbed data. と表示される場合は、通信そのものが失敗しているかを、WordPress の HTTP 機能で直接確かめます。

# 200 と表示されれば接続できている。失敗すると理由が表示される
wp eval '$r = wp_remote_get( "https://www.youtube.com/oembed?format=json&url=https://www.youtube.com/watch?v=jNQXAC9IVRw" ); echo is_wp_error( $r ) ? $r->get_error_message() : wp_remote_retrieve_response_code( $r );'

接続できないときに考えられる原因は次のとおりです。

  • wp-config.php で外部への通信を止めている: define( 'WP_HTTP_BLOCK_EXTERNAL', true ); があると、外部への HTTP 通信がすべて止まります。埋め込みを使うなら、WP_ACCESSIBLE_HOSTS に許可するホスト名をカンマ区切りで書くか、この設定を外します。
  • サーバーやホスティング会社の設定で外向きの通信を制限している: サーバーのファイアウォールで外向きの通信を止めていないか、ホスティング会社の説明やサポートで確かめます。
  • DNS や SSL 証明書の検証で失敗している: 上のコマンドで表示されるエラーメッセージ(cURL error 6、cURL error 60 など)を手がかりに調べます。

なお、WordPress のサーバー側の通信は HTTP API(cURL など)を使うため、PHP の allow_url_fopen の設定は oEmbed には関係しません。

4. ブロックエディターで「このコンテンツを埋め込めませんでした。」と出る場合

ブロックエディターで URL を入れたときに「このコンテンツを埋め込めませんでした。」と表示され、「再試行」「リンクへ変換」のボタンが出ることがあります。エディターは、WordPress の REST API(/wp-json/oembed/1.0/proxy)を通してプレビューを取得しています。次の点を確かめます。

  • 前の節の wp embed fetch が成功するか。失敗するなら、原因はサーバーの通信やサービス側にある
  • REST API が動いているか。セキュリティ系のプラグインや .htaccess で /wp-json/ へのアクセスを止めていると、エディターでの埋め込みも失敗します。確かめ方はWordPress REST APIが動かないときの対処法を参照してください
  • 非公開や削除された動画・投稿、埋め込みを許可していない動画ではないか。この場合は WordPress 側では直せません

5. プラグイン・テーマ・ブラウザー側を確かめる

  • 埋め込みを止めるプラグインや設定: 高速化やセキュリティのプラグインの中には、埋め込み機能を無効にする設定を持つものがあります。プラグインを一時的にすべて停止し、テーマを標準テーマ(Twenty Twenty-Five など)に切り替えて表示が戻るかを確かめると、原因を絞り込めます。本番サイトではなく、テスト環境で行うのが安全です。
  • X の投稿が文字だけで表示される: X の埋め込みは、まず引用(blockquote)として表示され、X のスクリプトが読み込まれると投稿の見た目に変わります。ブラウザーの広告ブロッカーや、サイトのコンテンツセキュリティポリシー(CSP)、Cookie 同意のプラグインがこのスクリプトを止めていると、文字だけの表示になります。
  • iframe が表示されない: ブラウザーの開発者ツールのコンソールにエラーが出ていないかを確かめます。CSP の frame-src で埋め込み先が許可されていないと、iframe が読み込まれません。

エラーの記録を残して調べる

原因が分からないときは、wp-config.php でデバッグログを有効にし、記事を表示した後に wp-content/debug.log を確かめます。設定方法はwp-config.phpでWordPressのデバッグモードを有効にする方法で説明しています。

まとめ

  • URL は前後に文字の無い1行で、リンクを付けずに貼る。対応先かどうかは wp embed provider match で確かめられる
  • X は twitter.com の URL で貼る。Instagram と Facebook は WordPress 5.5.2 以降、標準では埋め込めない
  • 失敗は投稿のメタデータに保存されるので、原因を直したら wp embed cache clear 投稿ID でキャッシュを消す
  • 埋め込み用の HTML はサーバーが取得する。wp embed fetch と wp_remote_get() でサーバーの外部通信を確かめる
  • ブロックエディターのエラーは REST API の状態も確かめる

関連記事

お気軽にご相談ください

お見積りへ お問い合わせへ
▲