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

WordPress(4.4~)が標準で出力するjson形式とxml形式のoembedデータファイル
自身のWordPressブログを記事にoembed機能で埋め込みできないなあとは思っていたのですが、あまり埋め込み自体は使わないのでほったらかしでした
以前は自動でoembed埋め込み機能自体使っていなかったのですが、WordPressのエディタがGutenbergになって段落ブロックにURLを置くと自動で埋め込みブロックになってしまい
このコンテンツは埋め込むことができません。
ってなってしまうんですよね
調べてみたらjson形式及びxml形式のoembedデータファイルがどちらもHTMLに出力されていませんでした
通常、出力される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データファイル出力まで停止していたとは
自身は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()で止められていると思われるWordPressの独自関数wp_oembed_add_discovery_linksを実行します
優先順序を初期値より遅い11にすることで表示されました
add_action( 'wp_head', 'wp_oembed_add_discovery_links', 11);
ディスカッション
コメント一覧
まだ、コメントがありません