WordPress拒绝显示嵌入的URL

时间:2011-06-30 作者:Jahufar

我需要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[&lt;b&gt;HELLO WORLD FROM OEMBED &lt;/b&gt;]]></html>
        </OEmbed>
API端点发送正确的内容类型标头(header("Content-type: text/xml");) 按照oembed spec

添加帖子的用户具有管理员权限,因此是允许的unfiltered_html

我没有主意了,也没有办法了。我错过了什么?

2 个回复
最合适的回答,由SO网友:Dougal Campbell 整理而成

XML根元素是“OEmbed”,而不是规范中给出的“OEmbed”。根据XML规范,XML元素名称区分大小写。

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":"&lt;b&gt;HELLO WORLD FROM OEMBED &lt;/b&gt;"
}
那样的话,事情会变得更好。JSON是所有提供程序oEmbed的首选格式。

结束

相关推荐

Displaying oEmbed errors?

有时,通过oEmbed嵌入项目是不可能的,例如,当YouTube视频已禁用嵌入时。The oEmbed service will return a 401 Unauthorized, 并且不会转换代码。有没有办法通知用户这一点?当前的工作流是非直观的(至少对我来说),我更喜欢在WordPress页面上,或者更好的是,在编辑器中显示一条消息,说明对象无法嵌入。