用于视频快捷码的响应嵌入

时间:2017-07-25 作者:Deka87

我推动了一个自定义代码来包装嵌入到.embed-responsive 类使其响应CSS,然后:

PHP:

function kadabra_responsive_embed( $html ) {
    return \'<div class="embed-responsive embed-responsive-16by9">\' . $html . \'</div>\';
}
add_filter( \'embed_oembed_html\', \'kadabra_responsive_embed\', 10, 3 );
add_filter( \'video_embed_html\', \'kadabra_responsive_embed\' );
CSS:

.embed-responsive-16by9 {
  height: 0;
  padding-bottom: 56.25%;
}
这对视频嵌入非常有效。然而,它也包装了其他嵌入,比如Twitter嵌入,这不是必需的。有没有办法使其仅限于视频嵌入?

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

您可以为embed_oembed_html 过滤并以第三个输入参数oembed为目标$url.

然后,您可以创建布尔函数,例如(未测试):

function is_oembed_from_video_specific_hosts_wpse274552( $url )
{
    return in_array(
        parse_url( $url, PHP_URL_HOST ),
        [
             \'youtube.com\',
             \'youtu.be\',
             \'vimeo.com\',  // ... etc
        ],
        true
    );
}
或更详细(更昂贵)的检查,如(未测试):

function is_video_oembed_wpse274552( $url )
{
    $video_providers = [
        \'#https?://((m|www)\\.)?youtube\\.com/watch.*#i\',
        \'#https?://((m|www)\\.)?youtube\\.com/playlist.*#i\',         
        \'#https?://youtu\\.be/.*#i\',        
        \'#https?://(.+\\.)?vimeo\\.com/.*#i\',                        
        \'#https?://(www\\.)?dailymotion\\.com/.*#i\',                 
        \'#https?://dai\\.ly/.*#i\',
        \'#https?://videopress\\.com/v/.*#\',
        \'#https?://wordpress\\.tv/.*#i\',
        \'#https?://(www\\.)?funnyordie\\.com/videos/.*#i\',
        \'#https?://(www\\.)?(animoto|video214)\\.com/play/.*#i\',
        \'#https?://www\\.facebook\\.com/.*/videos/.*#i\',
        \'#https?://www\\.facebook\\.com/video\\.php.*#i\', // ... etc
    ];

    $is_video_oembed = false;
    foreach( $video_providers as $video_provider )
    {
        if ( preg_match( $video_provider , $url ) ) {
        {
             $is_video_oembed = true;
             break;
        }
    }
    return $is_video_oembed;
}
注意,oEmbed提供者可以在WordPress核心和通过过滤器进行修改、添加和删除。这可能会影响上述检查。

希望您能根据自己的需要进行调整!

结束

相关推荐

Use oEmbed for static html

我正在尝试添加jQuery插件(https://github.com/rmanivannan/speedometer-jquery-plugin) 到Wordpress页面(不是post),但是插件的行为不符合预期。我认为这可能与使用我的Wordpress主题生成页面时脚本引用、css引用和Javascript被破坏的方式有关。是否可以:-将包含控件的静态HTML页面上载到子域-使用oEmbed将静态HTML页面包括在Wordpress页面中i、 e.子域将是主域的oEmbed提供程序?