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