从wp_oembed_add_Provider获取结果

时间:2016-04-29 作者:Tim Malone

我很难从wp_oembed_add_provider().

我正在开发一个需要嵌入Facebook视频内容的网站,我发现this handy list Facebook URL结构。

我首先关注的是#https?://(www\\.)?facebook\\.com/.*/videos/.*#i 因为这与我正在测试的视频相匹配。

Side point: 这可能是个问题,也可能不是,但我不明白为什么# 还有/\'不会转义,因为这些实践通常在正则表达式中无效(根据我对正则表达式的有限理解)。但是,它与YouTube example in the codex.

这是我的主题functions.php:

add_action("init", function(){

    wp_oembed_add_provider(
        \'#https?://(www\\.)?facebook\\.com/.*/videos/.*#i\',
        \'https://www.facebook.com/plugins/video/oembed.json/\',
        true
    );

});
我尝试匹配的URL是:https://www.facebook.com/899lightfm/videos/972261526144646/

Facebook的端点似乎是正确的https://www.facebook.com/plugins/video/oembed.json/?url=https://www.facebook.com/899lightfm/videos/972261526144646/ 返回有效响应。

在一篇帖子中,我把视频URL放在了自己的线上,然后在自己的线上放了一个类似的YouTube URL。YouTube URL被成功检测并转化为oembed(正如人们所料,Wordpress在本机上支持它),但Facebook URL没有被修改,只是以纯文本打印出来。

我在使用和挂钩吗wp_oembed_add_provider() 正确地我还应该做些什么,让Wordpress来处理这个问题吗?

EDIT: 我确实试过after_setup_themewp_oembed_add_provider()三 太晚了,但我也遇到了同样的问题。围绕webinit 似乎是更常见的勾引动作wp_oembed_add_provider() 进入

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

好的,我设法解决了这个问题!

对嵌入式系统的工作原理进行了一些挖掘,结果发现它不是wp_oembed_add_provider() 这是错误的。调试autoembed_callback() 在里面wp-includes\\class-wp-embed.php 显示我的YouTube URL正在通过,但我的Facebook URL从未通过此功能。

在文章内容通过autoembed() 功能(连接到the_content()) 显示出于某种原因,Facebook URL“没有按照autoembed() 被包裹在<p></p> 标签和另一行的一部分,即使它在编辑器中明显位于自己的新行上。

我不知道为什么FB的URL没有达到自己的目的,但从如何autoembed() 很好,我在functions.php:

add_filter("the_content", function($content){

    // Find URLs that are on their own line but are wrapped in <p></p> tags

    return preg_replace_callback(
        \'|^\\<p\\>(\\s*)(https?://[^\\s"]+)(\\s*)\\</p\\>$|im\',
        array($GLOBALS["wp_embed"], "autoembed_callback"),
        $content
    );

}, 11);
只要这是wpautop() (在上运行the_content 在默认优先级为10)时,两个链接都会正确移动到新行,并以<p></p> 标签,此函数将检测到的URL发送到autoembed_callback, 在这一点上,一切都正常运转。

呼。因此,真正的问题与换行有关,也可能与Wordpress检测自动嵌入URL的方式有关。我认为核心中的regex可能会更好地处理边缘情况,但希望这个附加函数现在能够解决这个问题。如果我遇到由此引起的任何其他问题,我会更新此内容。

相关推荐

我可以使用wp_oembed_get来检测有效的可嵌入链接吗?或者有更好的方法吗?

我正在寻找一种有效的方法来检测用户输入是否是有效的嵌入链接(以及类型)。我知道WordPress可以使用任意输入运行其嵌入代码。例如,如下所示:$embed_code = wp_oembed_get($some_string); if($embed_code!=FALSE){ // do something clever } 假设至少有一些链接,它将返回一个完全标记的链接,其他所有链接都失败。然而,我所追求的行为是能够向其提供一些用户输入(在适当的卫生条件下),如