Im目前正在编写一个插件,允许我将不同内容管理系统的内容导入WordPress。
几乎所有内容都按照我的要求工作:每个条目都会保存标题、内容和特色图片。我甚至设法在内容区域内传输和更新图像。但现在我正在努力解决最后一个问题。
如果内容中有嵌入式视频(youtube/vimeo),并且我将其保存为iframe,则其行为与wordpress oEmbed不同。
通常,当您在WordPress编辑器中将url粘贴到视频时,它会为您生成嵌入代码,同时只将url保存到数据库中。我真的不知道这是怎么回事,但即使我从html中去掉iframe,只添加url,它仍然需要我转到帖子,然后按update,以便iframe在前端工作。
我意识到的另一件事是,WordPress实际上并没有将标记保存到数据库中,但如果我插入来自其他CMS的数据,所有html标记都会随之插入(当然)。如果我随后转到帖子并按update,所有数据都会很好地格式化。
在保存到wordpress数据库之前,有没有一个函数可以用来“准备”来自另一个WYSISYG的原始html?或者是否有办法保存嵌入,以使其工作?
我觉得WordPress core在从编辑器保存到数据库时必须使用一个函数,但我似乎找不到关于这个函数的任何信息。
如对此问题有任何澄清,我们将不胜感激。
最合适的回答,由SO网友:TheGentleman 整理而成
将url包装在[embed]
短代码。这将迫使wordpress调用它的oEmbed实现。
[embed]https://www.youtube.com/watch?v=YE7VzlLtp-4[/embed]
或者,如果您希望能够控制高度/宽度
[embed height="400" width="600"]https://www.youtube.com/watch?v=YE7VzlLtp-4[/embed]
注意,这只适用于
wordpress\'s whitelist of sites. 您可以使用将网站添加到此列表中
wp_embed_register_handler
编辑如果您想检查您的提供商是否在白名单中,可以考虑这样做(注意,我以前从未测试过以下内容):
function prefix_is_whitelisted_embed($url){
require_once( ABSPATH . WPINC . \'/class-oembed.php\' );
if ( did_action( \'plugins_loaded\' ) ) { //if you do this before plugins are loaded you may prevent other plugins from adding urls to the whitelist
$oEmbed = _wp_oembed_get_object();
return $oEmbed->get_provider($url) === false?false:true;
}
}
此函数主要检查url是否有使用WP oEmbed对象的注册提供程序。如果是,则类方法
get_provider()
返回提供程序,如果不返回,则应返回bool false。这个函数只检查bool false并基于它返回。