将内容从不同的CMS/所见即所得准备到WordPress编辑器

时间:2015-08-07 作者:Malibur

Im目前正在编写一个插件,允许我将不同内容管理系统的内容导入WordPress。

几乎所有内容都按照我的要求工作:每个条目都会保存标题、内容和特色图片。我甚至设法在内容区域内传输和更新图像。但现在我正在努力解决最后一个问题。

如果内容中有嵌入式视频(youtube/vimeo),并且我将其保存为iframe,则其行为与wordpress oEmbed不同。

通常,当您在WordPress编辑器中将url粘贴到视频时,它会为您生成嵌入代码,同时只将url保存到数据库中。我真的不知道这是怎么回事,但即使我从html中去掉iframe,只添加url,它仍然需要我转到帖子,然后按update,以便iframe在前端工作。

我意识到的另一件事是,WordPress实际上并没有将标记保存到数据库中,但如果我插入来自其他CMS的数据,所有html标记都会随之插入(当然)。如果我随后转到帖子并按update,所有数据都会很好地格式化。

在保存到wordpress数据库之前,有没有一个函数可以用来“准备”来自另一个WYSISYG的原始html?或者是否有办法保存嵌入,以使其工作?

我觉得WordPress core在从编辑器保存到数据库时必须使用一个函数,但我似乎找不到关于这个函数的任何信息。

如对此问题有任何澄清,我们将不胜感激。

1 个回复
最合适的回答,由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并基于它返回。

结束

相关推荐