WordPress で埋め込んだ Youtube 動画の終了後に、知らない動画がお勧め出てきて困る→出さない方法

1

また、余計なお世話機能をオフにするTipsです。

今回の「余計なお世話の機能」は、WordPress に埋め込んだ Youtube動画の再生後に表示される、「おすすめ動画」についてです。

ぜんぜんオススメじゃない動画がよく表示されてきて、ゲンナリする貴殿も多いかと思います。

私はこのせいで未だにあんまり Youtube を見ません。(笑)

文字情報の方が素早く内容を理解しやすいので、動画ってよほどでないと・・・というのもあります。

さて、単に Youtube の問題であれば見なければ良いだけなのですが、このサイトでも Youtube へアップした動画を貼り付けたりしています。(笑、「使ってはいるのかよ!」というツッコミは受け入れます)

特に姉妹サイトのイラストブログの方では、タブレットを使ってイラストを描く過程をタイムラプス動画でたくさん紹介しています。(「たくさん使っているのかよ!」というツッコ・・・以下略)そのような動画の再生後に、イラストとはなんの関係もないオススメ動画が出てくるのが、心底うんざりしたので対応しました。下記は、その方法です。

方法

最近の WordPress は記事編集画面で Youtube のURLを貼り付けると、自動的に埋め込みコードに変換してくれます。

昔は Youtube から埋め込み用の iframe のコードを、HTMLとして埋め込んでいたので、埋め込みコード内のURL末尾に「?rel=0」を挿入することで、動画再生終了後に他人の動画のサムネールをを出さないことができたのですが、最近の WordPress のブロックエディタ機能で URLコピペーで記事を書きたいとなると、この方法は使えません。

ただ、「rel=0」のオプションは今も有効なので、展開される際に「&rel=0」を追記する方法が使えます。具体的には、処理を行うPHPのコードを function.php へ追記します。

コードの内容そのものはそんなに難しくはありません。embed に Youtube のURLが存在したら「&rel=0」を追記するという数行だけです。具体的には、正規表現で youtube のURLがマッチしたら置換というコードを、embed_oembed_html へフィルターします。正規表現の部分がちょっとトライアンドエラーが必要なくらいです。(正規表現、ホント慣れない…w)

コードは下記のようになります。

コード例1

// Youtube埋め込みタグでエンドタイトルでオススメ動画を紹介させない処理(「rel=0」追加処理)
if(!function_exists('custom_embed_param')) {
	function custom_embed_param($html, $url, $attr) {
		// youtubeのURLの場合に「rel=0」追加に置換
		$pattern = '/(youtube\.com\/embed\/[0-9a-zA-Z\?\=\&\_\-]+)/u';
		if(preg_match($pattern, $html) === 1) {
			return preg_replace($pattern, '$1&rel=0', $html);
		} else {
			return $html;
		}
	}
}
add_filter('embed_oembed_html','custom_embed_param',10,3);

上のコードでは、Youtube の埋め込みURLが必ず「?feature=oembed」が最後に付いた形式なので、無条件で「&」で連結して「rel=0」を付加していますが、もう少し汎用性を高めたい場合は、URL内に「?」が無かったら「&」ではなく「?」に連結して「rel=0」を付加するようにしても良いと思います。
少し長くなってしまいますが、下記のようになるかと思います。

コード例2

// Youtube埋め込みタグでエンドタイトルでオススメ動画を紹介させない処理(「rel=0」追加処理)
if(!function_exists('custom_embed_param')) {
	function custom_embed_param($html, $url, $attr) {
		// youtube のURLの場合に処理
		$pattern = '/(youtube\.com\/embed\/[0-9a-zA-Z\?\=\&\_\-]+)/u';
		if(preg_match($pattern, $html, $matches) === 1) {
			// 正規表現にヒットした文字列内に「?」があるか調べる
			if(strpos($matches[1], '?') !== false) {
				// ?を含む場合は「&rel=0」を追加に置換
				$html = preg_replace($pattern, '$1&rel=0', $html);
			} else {
				// ?を含まない場合は「?rel=0」を追加に置換
				$html = preg_replace($pattern, '$1?rel=0', $html);
			}
		}
		return $html;
	}
}
add_filter('embed_oembed_html','custom_embed_param',10,3);

なお、正規表現の[]内は文字集合指定のエリアなのでエスケープは不要ですが、”文字としてですよ” を明示するためエスケープしています。

いずれにせよ、この手のカスタマイズは、Wordpress や Youtube が仕様をバカみたいに変更してきたときには、また対応が必要になりますので、あんまりガチガチにやってもね・・・というのが最近の本音ではあります。

なので、たとえば今の Youtube の埋め込みURLだけに割り切って処理するなら、下記みたく「?feature=oembe」を「?feature=oembe&rel=0」に置換するだけでも動きます。

コード例3

// Youtube埋め込みタグでエンドタイトルでオススメ動画を紹介させない処理(「rel=0」追加処理)
if(!function_exists('custom_embed_param')) {
	function custom_embed_param($html, $url, $attr) {
		if(strpos($html, 'feature=oembed') !== false) {
			return str_replace('feature=oembed', 'feature=oembed&rel=0', $html);
		} else {
			return $html;
		}
	}
}
add_filter('embed_oembed_html','custom_embed_param',10,3);

上記の例1〜3のいずれでも動作はしますので、お好みで。

ちなみに私のサイトでは、真ん中のコード例2のやり方で置換しています。

ココココのページで、埋め込まれている動画の最後まで再生してみると、最後に不要なオススメ動画のが出なくなり、設定した関連動画などになっていることが確認できるかと思います。

以上、不要なオススメ動画が出てこなくなってスッキリ!な方法。
TTでした!!