如何添加oemed不支持新嵌入处理程序

时间:2015-08-30 作者:musasi

我正在寻找从网站上嵌入视频,不提供oembed支持,但在wp codex上提供的关于wp_embed_register_handler() 对我这样的人来说太宽了。

我尝试将示例代码上载到我的主题中functions.php, 我认为这会嵌入任何来自url的福布斯视频,比如oembed支持的网站,如youtube,但只会将链接输出到帖子上。

(注意:由于我的代表性较低,所有链接都已编辑。)

在我的例子中,我试图为一个名为myvi.ru.我只想将url粘贴到帖子中,并自动使其输出嵌入的iframe代码。

例如,put

http:/www.myvi.ru/watch/Krishtianu-Ronaldu-na-ploschadi-Madrida_I8fWfbDia0ufHwP7W85ZBg2?ap=1
subbing公司///

这是一个帖子,而不是必须得到实际的嵌入代码,这是

iframe width="640" height="390" src="/myvi.ru/player/embed/html/o7wvdeXPclZHaazh9Rum_ZuqOtTxR2_ntg5OVhDEhxabugy0qLQDKTbQ0SRijDi8N0" frameborder="0" allowfullscreen></iframe
<> 取出

我想将以下内容放入主题函数中。php可以解决这个问题,但运气不好。

wp_embed_register_handler( \'myvi\', \'#http://(?:www)\\.myvi\\.ru/(?:video/embed/embed\\.html|embedvideo/)\\?show=([\\d]+)&format=frame&height=([\\d]+)&width=([\\d]+)&video=(.+?)($|&)#i\', \'wp_embed_handler_myvi\' );

function wp_embed_handler_myvi( $matches, $attr, $url, $rawattr ) {

    $embed = sprintf(
            \'<iframe src="http:/www.myvi.ru/embed/embed.html?show=%1$s&format=frame&height=%2$s&width=%3$s&video=%4$s&mode=render" width="%3$spx" height="%2$spx" frameborder="0" allowfullscreen></iframe>\',
            esc_attr($matches[1]),
            esc_attr($matches[2]),
            esc_attr($matches[3]),
            esc_attr($matches[4])
            );

    return apply_filters( \'embed_myvi\', $embed, $matches, $attr, $url, $rawattr );
}
谁能给我指一下正确的方向吗?我试着在谷歌上搜索其他可以学习的例子,但找不到,我被卡住了。如果您能提供任何有帮助的建议或信息链接,我将不胜感激。谢谢

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

注册自定义嵌入处理程序wp_embed_register_handler() 在您的情况下的功能:

/**
 * Register an embed handler for myvi videos
 */
add_action( \'init\', function()
{
    wp_embed_register_handler( 
        \'myvi\', 
        \'#http://www\\.myvi\\.ru/watch/([a-zA-Z0-9_-]+)$#i\',   // <-- Adjust this to your needs!
        \'myvi_embed_handler\' 
    );
} );
这里,我们以不支持任何GET参数的方式构造正则表达式。因此,在测试时,需要删除?api=1 部分来自url。否则,您可以根据需要进一步调整正则表达式。

自定义回调处理程序定义为:

/**
 * Handler callback for the myvi video provider
 */
function myvi_embed_handler( $matches, $attr, $url, $rawattr )
{
    $embed = sprintf(
        \'<iframe src="http://myvi.ru/player/embed/html/%1$s" width="600" height="400" frameborder="0" allowfullscreen></iframe>\',
        esc_attr( $matches[1] )
    );
    return apply_filters( \'myvi_embed_handler\', $embed, $matches, $attr, $url, $rawattr );
}
注意,这里我们假设所有必要的嵌入信息都包含在视频链接中。

以下是它在编辑器中的工作方式:

testing myvi

您应该只为您的网站执行此操作really trust!

相关推荐

Embed Form In Header

我正在使用WordPress主题Twenty Ninteen,并试图借助Travelpayouts提供的旅游联盟API创建一个旅游博客。<script charset=\"utf-8\" src=\"//www.travelpayouts.com/widgets/920a6b8c6fc20070013d2e04f690210d.js?v=1649\" async></script> 这是要在页面/帖子上显示的表单代码,如果我在任何帖子上使用的页面代码工作正常,但我需要在标