使用WordPress嵌入添加参数Vimeo视频

时间:2013-08-19 作者:Andy M

我使用自定义字段在WordPress上嵌入任何受支持的视频,例如,用户在自定义字段框中输入视频地址:

http://vimeo.com/72104173
我在我的主题上实现了以下代码:

<?php
$videourl = my_meta(\'video\'); // get custom field value
if($videourl!=\'\'){ // if custom field exist  ?>
<?php 
$htmlcode = wp_oembed_get("{$videourl}"); //use oembed  
echo "<div class=\'video\'>{$htmlcode}</div>"; //output the video ?>
...
结果/输出如下:

<iframe ... src="http://player.vimeo.com/video/72104173"></iframe>
问题是,我想向vimeo添加额外的参数,以便通过向src添加以下内容来隐藏视频的标题和署名:

?title=0&amp;byline=0&amp;portrait=0
因此,最终结果将是:

<iframe ... src="http://player.vimeo.com/video/72104173?title=0&amp;byline=0&amp;portrait=0"></iframe>
我试图使用str_replace 但问题是,参数被添加到每个视频src的末尾,每次的surce都会不同,

非常感谢您的帮助,谢谢

2 个回复
SO网友:rjb

WordPress中有几个过滤器用于更改嵌入的数据,具体取决于您需要修改结果的时间:

  1. embed_handler_html
    过滤返回的嵌入处理程序
  2. embed_oembed_html
    过滤缓存的oEmbed HTML
  3. oembed_result
    过滤oEmbed提供程序返回的HTML
选择最适合您需要的过滤器,但请记住,每个过滤器作用于oEmbed过程不同阶段的数据,可能会影响性能。

例如,embed_handler_html 在数据放入oEmbed/wp\\u postmeta缓存之前调用(因此每次外部嵌入仅调用一次),而embed_oembed_html 在检索oEmbed缓存后调用(因此每次显示该项时)。

如果只需要修改一次oEmbed数据,oembed_result 可能是你最好的候选人。

为了回答您的问题,下面的示例修改了从WordPress返回的Vimeo和YouTube嵌入参数wp_oembed_get() 作用

<;iframe>;HTML标记首先由PHP的DOMDocument 类,然后使用WordPress修改嵌入URLadd_query_arg() 功能:

/**
 *
 */
add_filter( \'oembed_result\', function ( $html, $url, $args ) {
    $doc = new DOMDocument();
    $doc->loadHTML( $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD );
    $tags = $doc->getElementsByTagName( \'iframe\' );

    foreach ( $tags as $tag ) {
        $iframe_src = $tag->attributes->getNamedItem(\'src\')->value;

        if ( false !== strpos( $iframe_src, \'youtube.com\' ) ) {
            // https://developers.google.com/youtube/player_parameters
            $url = add_query_arg( array(
                \'autohide\' => 1,
                \'autoplay\' => 1,
                \'controls\' => 2,
                \'feature\' => null,
                \'modestbranding\' => 1,
                \'playsinline\' => 1,
                \'rel\' => 0,
                \'showinfo\' => 0,
            ), $iframe_src );
        }

        if ( false !== strpos( $iframe_src, \'vimeo.com\' ) ) {
            // https://developer.vimeo.com/player/embedding
            $url = add_query_arg( array(
                \'autoplay\' => 1,
                \'badge\' => 0,
                \'byline\' => 0,
                \'portrait\' => 0,
                \'title\' => 0,
            ), $iframe_src );
        }

        $tag->setAttribute( \'src\', $url );

        $html = $doc->saveHTML();
    }

    return $html;
}, 10, 3 );

SO网友:kraftner

我猜(没有尝试)与其他解决方案不兼容的可能是,在请求Vimeo提供嵌入代码之前附加到url可能会被Vimeo忽略。

所以我所做的只是用正则表达式解析响应:

$htmlcode = preg_replace("/(http:\\/\\/player.vimeo.com\\/video\\/[0-9]*)/i", \'$1?title=0&portrait=0&byline=0&color=ffffff\', $htmlcode);

结束

相关推荐

OEmbedded无法识别Vimeo URL

我正在尝试将Vimeo视频嵌入到帖子中。我正在像这样将URL插入页面。Lorem ipsum dolor sit amet, consectetur adipiscing elit. http//vimeo.com/1234 Lorem ipsum dolor sit amet, consectetur adipiscing elit. 它作为纯文本URL输出。我用youtube链接试用过,效果很好。我也试过用[embed] shortcode,但它只是将其包