WordPress 5.3.x YouTube oEmbed不工作

时间:2021-02-01 作者:Mayeenul Islam

我们跟着Brian Fegter\'s answer 要使用WordPress的嵌入功能显示YouTube视频,请执行以下操作:

// Public video.
$video_url = \'https://www.youtube.com/watch?v=1lODe0i7dNw\';

require_once(ABSPATH . \'wp-includes/class-wp-oembed.php\');
$oembed = new WP_oEmbed;

// Auto-detect the video provider with the following
$provider = $oembed->discover($video_url);

$video = $oembed->fetch($provider, $video_url);

echo $video->html;
代码运行得更早。但现在它不起作用了。我们正在使用WordPress 5.3.2。我们尝试将WordPress更新到5.3.6,但没有成功。

主要问题是:$oEmbed->discover() 无法检测到任何提供程序并返回false. :(

您可以在上看到该问题的实况this link. (如果您需要,我们将在一段时间内显示一些调试信息)

Debug information

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

所以很明显,这个问题也发生在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)

Chrome DevTools

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;