2026年6月25日
2026年6月25日
WordPressの埋め込み(oEmbed)が表示されないときの確認手順と直し方
WordPress では、YouTube などの URL を貼るだけで、動画や投稿が記事の中に表示されます。この仕組みを oEmbed と呼びます。埋め込みにならずに URL やリンクのまま表示されるときは、次の順に確かめると原因を絞り込めます。
- URL の貼り方と、そのサービスが WordPress の対応先かどうか
- 前回の失敗が保存(キャッシュ)されていないか
- サーバーから外部のサービスに接続できるか
- ブロックエディターが使う REST API が動いているか
- プラグインやテーマが埋め込みを止めていないか
この記事の内容は、WordPress 7.1 のソースコード(wp-includes/class-wp-embed.php、class-wp-oembed.php)と WP-CLI で動作を確かめています(2026年10月時点)。
oEmbed の仕組み
URL が埋め込みに変わるまでの流れは次のとおりです。
- WordPress は、URL が登録済みのサービス(プロバイダー)のどれに当たるかを調べる
- サーバーからそのサービスの oEmbed 用の窓口に問い合わせ、埋め込み用の HTML を受け取る
- 受け取った 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 の状態も確かめる