WordPressでトップページが埋め込み表示されない問題とその対策
WordPressでは、記事URLを貼り付けるだけで自動的に埋め込みカードが表示される「oEmbed」機能があります。しかし、以下のようなケースではうまく表示されないことがあります。
- トップページのURLを貼ってもカードにならない
- サイドバーなどでURLを貼ってもテキストリンクになる
- 外部サイトからの埋め込みが記事ではできるのに、トップではできない
今回は、自身のドメインのトップページが埋め込めないという問題に対して、実際に行った対応と成功例をご紹介します。
原因:トップページへのoEmbedレスポンスが存在しない
WordPressは通常、記事ごとに「oEmbed用のメタタグ(link rel=”alternate”)」を出力しますが、トップページ(フロントページ)にはこれが出力されていない場合が多く、これが埋め込みに失敗する原因となります。
対策:functions.phpにコードを追加してトップページに対応
以下のコードを functions.php
または Code Snippets
プラグインに追加することで、トップページにoEmbedのメタ情報を付加し、レスポンスとしてJSON形式のカード情報を返せるようになります。
1. oEmbedエンドポイントを登録
function neko_add_oembed_provider($providers) {
$providers['#^https?://(www\.)?necokoucan\.com/?$#i'] = [
home_url('/wp-json/neko-oembed/v1/embed?url={url}'),
'discover' => true
];
return $providers;
}
add_filter('oembed_providers', 'neko_add_oembed_provider');
2. oEmbedのレスポンスを用意
function neko_oembed_response() {
register_rest_route('neko-oembed/v1', '/embed', [
'methods' => 'GET',
'callback' => 'neko_render_oembed_response',
'args' => [
'url' => [
'required' => true,
'validate_callback' => function($param) {
return filter_var($param, FILTER_VALIDATE_URL);
}
]
],
'permission_callback' => '__return_true'
]);
}
add_action('rest_api_init', 'neko_oembed_response');
3. レスポンスの内容を定義
function neko_render_oembed_response($request) {
$url = esc_url_raw($request['url']);
if (trailingslashit($url) === trailingslashit(home_url('/'))) {
return [
'version' => '1.0',
'type' => 'rich',
'provider_name' => '猫工艦とボルトアクション',
'provider_url' => home_url('/'),
'title' => 'ミリタリーグッズ工房 猫工艦',
'thumbnail_url' => get_site_icon_url(512),
'html' => '<a href="' . esc_url($url) . '" target="_blank">トップページを見る</a>',
'width' => 600,
'height' => 200,
'description' => '軍艦や戦車などのグッズを紹介しています。'
];
}
return new WP_Error('oembed_invalid_url', 'Not Found', ['status' => 404]);
}
成功のポイント
register_rest_route
でトップページ専用のエンドポイントを追加oembed_providers
に正規表現でトップページURLをマッチさせるis_front_page()
ではなく、trailingslashit
を使ってURL比較することで確実に一致させる
補足:他のWordPressサイトにも応用可能
同じ仕組みを使えば、サブドメイン(例:shop.necokoucan.com)や他のWordPressサイトでも応用可能です。サイト名、アイコンURL、タイトルなどをそのサイトに合わせて変更してください。
まとめ
WordPressでoEmbedカードがトップページだけ表示されない場合、手動でトップページ用のoEmbedレスポンスを用意することで解決できます。
ブログや商品ページを他サイトにきれいに埋め込みたい方にとって、非常に役立つ設定です。ぜひ試してみてください。
※PR記事リンクです。
