好的,我设法解决了这个问题!
对嵌入式系统的工作原理进行了一些挖掘,结果发现它不是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可能会更好地处理边缘情况,但希望这个附加函数现在能够解决这个问题。如果我遇到由此引起的任何其他问题,我会更新此内容。