通过emed_oembed_html过滤器函数仅向YouTube视频添加包装器

时间:2017-01-31 作者:kidA

我有一个过滤器,用于将嵌入链接包装在响应包装器中。请参见代码。

add_filter(\'embed_oembed_html\', \'wrap_embed_with_div\', 10, 3);

function wrap_embed_with_div($html, $url, $attr) { 
return \'<div class="responsive-container">\'.$html.\'</div>\';
}
唯一的问题是,这也适用于oembed列表上的所有其他内容,即推特嵌入、instagram等。我试图添加一个if语句,但运气不好。基本上,只需将此包装器添加到youtube/vimeo等视频嵌入中即可。这是我到目前为止得到的。

add_filter(\'embed_oembed_html\', \'wrap_embed_with_div\', 10, 3);

function wrap_embed_with_div($html, $url, $attr) {
if ($url == \'https://youtube.com\'){ 
return \'<div class="responsive-container">\'.$html.\'</div>\';
}
else { 
return $html;
}
}

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

$url 将包含嵌入源的完整URL。E、 g.:https://www.youtube.com/watch?v=_UmOY6ek_Y4, 所以你必须在$url 要查看是否显示提供程序的名称,请执行以下操作:

add_filter( \'embed_oembed_html\', \'wpse_embed_oembed_html\', 99, 4 );
function wpse_embed_oembed_html( $cache, $url, $attr, $post_ID ) {
    $classes = array();

    // Add these classes to all embeds.
    $classes_all = array(
        \'responsive-container\',
    );

    // Check for different providers and add appropriate classes.

    if ( false !== strpos( $url, \'vimeo.com\' ) ) {
        $classes[] = \'vimeo\';
    }

    if ( false !== strpos( $url, \'youtube.com\' ) ) {
        $classes[] = \'youtube\';
    }

    $classes = array_merge( $classes, $classes_all );

    return \'<div class="\' . esc_attr( implode( $classes, \' \' ) ) . \'">\' . $cache . \'</div>\';
}

相关推荐

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提供程序?