问题描述
我正在运行一个仅通过 SSL /HTTPS 进行通信的网站,所以如果我使用 http 嵌入 YouTube 视频,我将收到一条错误消息,表示该网站不完全安全。是否可以重写某些内容,以便 WordPress 接受 https 并仍然自动嵌入添加到内容区域的 YouTube 链接?因为现在,当我尝试嵌入一个 https youtube 链接,所有显示的是 URL,没有电影。
更新
我试图在 functions.php 中添加使用这个代码的提供者,但它什么都不做:
wp_oembed_add_provider('https://youtu.be/*', 'https://youtube.com/oembed' );
wp_oembed_add_provider('#https://(www.)?youtube.com/watch.*#i', 'https://youtube.com/oembed', true);
wp_oembed_add_provider('http://youtu.be/*', 'https://youtube.com/oembed' );
wp_oembed_add_provider('#http://(www.)?youtube.com/watch.*#i', 'https://youtube.com/oembed', true);
最佳解决方案
http://core.trac.wordpress.org/ticket/18719 现在有一个工作补丁。
编辑:插件代码做相似,直到补丁进入:
wp_oembed_add_provider('#https://(www.)?youtube.com/watch.*#i', 'http://youtube.com/oembed?scheme=https', true);
wp_oembed_add_provider('https://youtu.be/*', 'http://youtube.com/oembed?scheme=https', false );
次佳解决方案
Otto 的解决方案在 WP 3.6 中不起作用,大概是因为内核已经改变了内核,现在匹配 https://,所以增加的提供商永远不会匹配。虽然 https://在核心中匹配,但它始终提供一个 http://embed,即使原始 URL 是 https://,所以我们在这里仍然有同样的问题。
我已经决定把所有的装配转换成 protocol-relative:
function my_embed_oembed_html( $html ) {
return preg_replace( '@src="https?:@', 'src="', $html );
}
add_filter( 'embed_oembed_html', 'my_embed_oembed_html' );
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。