WordPressにはoEmbed という仕組みが導入されていて、たとえばYouTubeのURLを投稿の本文に入れるだけで、自動的に動画の埋め込みタグに変換してくれます。すごく便利なんですが、埋め込みコードの外側のp
タグにclass
を追加したり、iframe
の属性をカスタマイズしたい場合、WordPressのフィルター機能 を使う必要があります。
今回はそのカスタマイズの方法をご紹介します。
WordPressでoEmbedでYouTube動画を埋め込むには
以下のURLを本文に書くと…
https://www.youtube.com/watch?v=IEsunlfXLig
自動的に以下のHTMLに変換されます。
<p><iframe width="500" height="281" src="https://www.youtube.com/embed/IEsunlfXLig?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
これがデフォルトで書き出されるHTMLです。
WordPressが書き出すHTMLをカスタマイズする方法
たとえばYouTube動画をレスポンシブ対応させたい場合、書き出されるHTMLを調整したほうが簡単(シンプル?)です。僕の場合、width
とheight
の属性を削除して、最終的に書き出されるコードを以下のようにカスタマイズしました。
<div class="youtube"><iframe src="https://www.youtube.com/embed/IEsunlfXLig?feature=oembed" frameborder="0" allowfullscreen></iframe></div>
width
とheight
属性が記載されていても、CSSで強制的に幅と高さは調整できるんですけど、!important
を使うのが気持ち悪いので、コードを書き換えました。
functions.phpに関数を追加
WordPressが書き出すコードを書き換えるために、functions.php
に以下のフィルターを追加しました。
// Customize YouTube oEmbed Code
function custom_youtube_oembed($code){
if(strpos($code, 'youtu.be') !== false || strpos($code, 'youtube.com') !== false){
$html = preg_replace('/ width="\d+"/', '', $html);
$html = preg_replace('/ height="\d+"/', '', $html);
$html = '<div class="youtube">' . $html . '</div>';
return $html;
}
return $code;
}
add_filter('embed_handler_html', 'custom_youtube_oembed');
add_filter('embed_oembed_html', 'custom_youtube_oembed');
さらに、以下の行を加えるとYouTube動画のオプションの設定をカスタマイズできます。
$html = preg_replace("@src=(['\"])?([^'\">\s]*)@", "src=$1$2&showinfo=0&rel=0", $code);
たとえば、以下のような設定 を追加できます。
追加するパラメータ | 設定 |
---|---|
showinfo=0 | 動画のタイトルを非表示にする |
rel=0 | 関連する動画を非表示にする |
controls=0 | プレーヤー コントロールを非表示にする |
YouTube動画の表示設定を調整する場合、最終的にfunctions.php
に入れるコードは以下のようになります。ここでは動画のタイトルと関連動画を非表示にするためにshowinfo=0
とrel=0
を追加しています。
// Customize YouTube oEmbed Code
function custom_youtube_oembed($code){
if(strpos($code, 'youtu.be') !== false || strpos($code, 'youtube.com') !== false){
$html = preg_replace("@src=(['\"])?([^'\">\s]*)@", "src=$1$2&showinfo=0&rel=0", $code);
$html = preg_replace('/ width="\d+"/', '', $html);
$html = preg_replace('/ height="\d+"/', '', $html);
$html = '<div class="youtube">' . $html . '</div>';
return $html;
}
return $code;
}
add_filter('embed_handler_html', 'custom_youtube_oembed');
add_filter('embed_oembed_html', 'custom_youtube_oembed');
CSSを追加
YouTube動画をレスポンシブ対応させるために、以下のCSSを追加しました。
.youtube {
position: relative;
padding-bottom: 56.25%;
height: 0;
overflow: hidden;
max-width: 100%;
}
.youtube iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
これで埋め込まれたYouTube動画が、どの画面サイズでも画面比率(アスペクト比)をキープしたまま動画を内包するコンテナ要素の最大幅で表示されるようになります。padding-bottom
が56.25%なのは、アスペクト比が16:9の動画に合わせるためです。横幅を100%とした時に、縦の比率を計算すると 100 : X = 16 : 9 → X = (9 x 100) ÷ 16 = 56.25 となるわけですね。
以上、WordPressがoEmbedで書き出すYouTube動画用のHTMLをカスタマイズしてレスポンシブ対応させる方法でした。お役に立てば幸いです。
WordPress関連の記事
よかったら他のWordPress関連の記事もどうぞ
- WordPressの投稿をカレンダー表示できるプラグイン、Editorial Calendarが便利
- WordPressで投稿日時を○日前と表示する方法
- 年末だし、WordPressのバックアップとローカル環境への復元
- WordPressでレスポンシブ・イメージの自動化を可能に。RICG公認プラグインが公開
- HTML5やCSS3のサポート状況を簡単に記事に挿入できる「Can I use…」のWordPressプラグインが便利
- WordPress 4.4からデフォルトで実装されたレスポンシブイメージってどうなのよ?
- WordPress 4.4以降でのレスポンシブ・イメージ・プラグインはどうなるの?
- WordPressで同じタグをつけた記事のリンク一覧を表示させるショートコードを作ってみた
- WordPressの過去記事を自動でSNS投稿してくれる「Revive Old Post」の文字化け解消方法
- WordPressデータベースの復元の際、wp_commentmetaでエラーが出る件
- WordPressの記事一覧に件数を指定してアイキャッチ画像を表示する方法
- WordPressの投稿でSVG画像を使えるようにしても、OGPやTwitter Cardsで対応してなかった件
- さくらのレンタルサーバー上のWordPressの常時SSL化でハマりまくったのでシェアしておきます
- WordPress 4.9.9でSVGがアップロードできない!原因と応急処置
- WordPressデータベース復元の際にphpMyAdminで「Incorrect format parameter」エラーが出た時の対処法
- Local(macOS)のSSLのFirefoxの警告を回避する方法
参照サイト
以下のサイトを参照させてもらいました。ありがとうございました!
- Modify Youtube Oembed URLs to remove showinfo and more (WordPressのフィルターのカスタマイズについて)
- oEmbed.com (oEmbedの仕様について)
- oEmbed — WordPress Codex 日本語版
- 関数リファレンス/add filter — WordPress Codex 日本語版
2016年7月20日に公開され、2017年2月25日に更新された記事です。
About the author
「明日のウェブ制作に役立つアイディア」をテーマにこのブログを書いています。アメリカの大学を卒業後、ボストン近郊のウェブ制作会社に勤務。帰国後、東京のウェブ制作会社に勤務した後、ウェブ担当者として日英バイリンガルのサイト運営に携わる。詳しくはこちら。
ウェブ制作・ディレクション、ビデオを含むコンテンツ制作のお手伝い、執筆・翻訳のご依頼など、お気軽にご相談ください。いずれも日本語と英語で対応可能です。まずは、Mastodon @rriver@vivaldi.net 、Twitter @rriver 、またはFacebook までご連絡ください。
[…] WordPressの投稿にURLだけでYouTube動画を埋め込む際のHTMLをカスタマイズする方法 – Rriver […]