我需要WP来显示url的嵌入表示,例如http://domain.com/1121 使用oembed。
我有设置http://domain.com/1121 使用发现链接:
<link href="http://www.domain.com/generator/oembed/?url=http%3A//domain.com/1121" rel="alternate" type="text/xml+oembed" />
我知道WP不再自动发现可嵌入的URL,所以我安装了
enable-oembed-discovery 重新启用此功能的插件。
我监控了我的apache日志,并确认WP确实会点击链接进行发现,所以我猜enable-oembed发现插件可以工作,但URL从未转换。
我甚至编写了一个插件来将我的自定义URL列入白名单(真的不需要,因为启用oembed发现插件应该启用自动发现,但这又是何等糟糕):
add_action( \'init\', \'my_oembed_provider\' );
function my_oembed_provider() {
wp_oembed_add_provider( \'http://domain.com/*\', \'http://www.domain.com/generator/oembed/\', false);
}
还是什么都没有。
API端点(http://www.domain.com/generator/oembed/)硬编码以生成以下XML:
<?xml version="1.0" encoding="UTF-8"?>
<OEmbed>
<type>rich</type>
<width>400</width>
<height>342</height>
<html><![CDATA[<b>HELLO WORLD FROM OEMBED </b>]]></html>
</OEmbed>
API端点发送正确的内容类型标头(
header("Content-type: text/xml");
) 按照
oembed spec添加帖子的用户具有管理员权限,因此是允许的unfiltered_html
我没有主意了,也没有办法了。我错过了什么?
SO网友:Otto
有两件事:
WordPress的oEmbed实现更倾向于使用JSON,并且可以更好地使用JSON。
要使用XML,WordPress需要PHP中的simplexml库。如果它不可用,那么您可能会得到您看到的结果。它正在获取XML,但没有simplexml就无法解析它,所以。。。什么都没发生。
解决此问题的最佳方法:停止使用XML。改用JSON。
链接类型将是application/json+oembed。
端点将返回json数据(使用应用程序/json的内容类型):
{
"type":"rich",
"width":"400",
"height":"342",
"html":"<b>HELLO WORLD FROM OEMBED </b>"
}
那样的话,事情会变得更好。JSON是所有提供程序oEmbed的首选格式。