所以很明显,这个问题也发生在WordPress 5.6(截至撰写之日的最新版本)中,YouTube可能是因为(oEmbed)<link>
标签位于body
而不是head
(参见下面的屏幕截图),而这反过来又会导致问题,因为WP_oEmbed::discover()
查找<link>
中的标记head
仅限。其次,YouTube使用http://
而不是https://
(安全协议)<link>
标签,所以您需要替换它http://
具有https://
如果您的网站使用https://
或启用SSL。
Screenshot 1: Elements inspector tab (in Chrome)
一
WP_oEmbed::discover()
零三也许(YouTube没有错,WordPress核心团队应该修改这个功能,以便它也可以在
body
? 或者使用更好的方法查找标记,如使用
DOMDocument ...?
但无论如何,正如@Rup, 您也可以使用WP_oEmbed::get_provider()
将加载类中定义的受认可/信任的oEmbed提供程序constructor, 在撰写本文时,YouTube实际上是提供商列表中的第一个。
// So instead of:
// this fetches the <link> tags from the provider site
$provider = $oembed->discover( $video_url );
// Use this one:
// this finds in the sanctioned oEmbed providers first
// then tries with the above discover()..
$provider = $oembed->get_provider( $video_url );
或者正如我在评论中所说的,如果您只是想获得HTML/嵌入代码,那么您可以简单地使用
wp_oembed_get()
虽然是间接的,但函数使用
WP_oEmbed::get_data()
其中使用
WP_oEmbed::get_provider()
:
// I\'d prefer this:
echo wp_oembed_get( $video_url );
// But that is equivalent to:
$video = $oembed->get_data( $video_url );
echo $video->html;
// And that is equivalent to:
$provider = $oembed->get_provider( $video_url );
$video = $oembed->fetch( $provider, $video_url );
echo $video->html;