WordPress | 埋め込み用のoembedファイルをheadに出力する方法

2023-02-21WordPress カスタマイズ,WordPress

WordPress | 埋め込み用のoembedファイルをheadに出力する方法

WordPress(4.4~)が標準で出力するjson形式、xml形式のoembedデータファイルを<head>内に出力する方法について紹介しています。

通常、出力されるoembedファイル

<link rel="alternate" type="application/json+oembed" href="" />
<link rel="alternate" type="text/xml+oembed" href="" />

出力する機能を停止していなければ、2種のlink relタグが<head>内に出力されています。
調べても、これを消す方法はいくつも見つかりますが、WordPressが標準で出力するのだから当然ですが、出力する方法は全然出てきません。

oembedファイルが出力されない原因

原因を確認してみたら、利用しているテーマ「Luxeritas」のブログカードの機能を使っていて、かつ「直書きの URLをブログカード化する」を有効にしていると上記link relタグの出力も無効になっているようでした。

ブログカード設定画面

他の方達の「Luxeritas」を利用しているブログをいくつかチェックしてみると、やはり出力されていたりされていない事を確認。

「直書きの URLをブログカード化する」機能は凄く便利で、もしかテーマを変更する時にも記事データにあるのはショートコードでもなく直書きのURLなので対応がしやすいと考えます。

WordPressのoembed機能と手順が一緒なのでリンク生成としてはoembed機能が消えるのは当然です。

oembed用ファイルをheadに出力する方法

かといって「直書きの URLをブログカード化する」は外したくないので別で出力する方法を考えました。

link relタグをそのまま出力する

出てくるコードは固定なので直接書いても問題ありませんでした。

フロントページなど投稿ページ以外のページはアクセスしてもコードが生成されないので投稿ページだけで実行します。
他ページで生成されないのはWordPressの仕様みたいです。

function oembed_add()
{
	if (is_singular()) {
		echo '<link rel="alternate" type="application/json+oembed" href="' . esc_url(get_oembed_endpoint_url(get_permalink())) . '" /><link rel="alternate" type="text/xml+oembed" href="' . esc_url(get_oembed_endpoint_url(get_permalink(), 'xml')) . '" />';
	}
}

add_action('wp_head', 'oembed_add');

wp_oembed_add_discovery_linksで出力する

remove_action()関数で止められていると思われましたので、WP関数、wp_oembed_add_discovery_links()を実行します。
これにより優先順序を初期値より遅い11にすることで表示されました。

add_action( 'wp_head', 'wp_oembed_add_discovery_links', 11);