WordPress URL 自動埋め込みの無効化

WordPress は画像・動画ファイル・音声ファイル・YouTube・Twitter などのコンテンツを簡単にそして安全に埋め込むことができます。「Embed」などと呼ばれている機能です。

埋め込みたい先の URL を独立した行に入力するだけで埋め込む(ここでは「URL 自動埋め込み」と呼称)ことができます。また、embed ショートコードで埋め込むこともできます。

URL 自動埋め込みはとても便利なのですが、単に URL だけを表示したい場合など、この機能を停止したい場合もあります。

ここでは、URL 自動埋め込みを無効化する方法を紹介します。

URL 自動埋め込みを無効化

URL 自動埋め込みを無効化します。embed ショートコードは無効化しませんので、埋め込みしたい場合は、ショートコードで埋め込むことができます。

コードは下記の通りです。functions.php 等に追記してください。

if ( isset( $GLOBALS['wp_embed'] ) ) {
	remove_filter( 'the_content', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 );
}

サイト内 URL のみ URL 自動埋め込みを無効化

URL がサイト内の場合のみ、URL 自動埋め込みを無効化します。

コードは下記の通りです。functions.php 等に追記してください。

if ( isset( $GLOBALS['wp_embed'] ) ) {
	remove_filter( 'the_content', array( $GLOBALS['wp_embed'], 'autoembed' ), 8 );

	function my_autoembed( $content ) {
		$content = wp_replace_in_html_tags( $content, array( "\n" => '<!-- wp-line-break -->' ) );
		if ( preg_match( '#(^|\s|>)https?://#i', $content ) ) {
			$content = preg_replace_callback( '|^(\s*)(https?://[^\s<>"]+)(\s*)$|im', 'my_autoembed_callback', $content );
			$content = preg_replace_callback( '|(<p(?: [^>]*)?>\s*)(https?://[^\s<>"]+)(\s*<\/p>)|i', 'my_autoembed_callback', $content );
		}
		return str_replace( '<!-- wp-line-break -->', "\n", $content );
	}

	add_filter( 'the_content', 'my_autoembed', 8 );

	function my_autoembed_callback( $match ) {
		$url = $match[2];
		$url_host = str_replace( 'www.', '', parse_url( $url, PHP_URL_HOST ) );
		$home_url_host = str_replace( 'www.', '', parse_url( home_url(), PHP_URL_HOST ) );
		if ( $url_host && $url_host == $home_url_host ) {
			return $url;
		}

		return $GLOBALS['wp_embed']->autoembed_callback( $match );
	}
}

参考ページ: WP_Embed::autoembed() | Method | WordPress Developer Resources

コメントを残す

メールアドレスが公開されることはありません。

日本語でコメントを入力してください。(スパム対策)