YouTube的embed代码有两种,一种是iframe的,一种是object的,无论哪种,相对于YouTube视频地址来说,都比较长,如果允许用户直接输入视频地址就可以播放视频,最好不过。自己写的程序中需要通过获取YouTube视频ID并转换出Embed 代码,WordPress则内置了视频地址和embed代码转换的功能——oembed

通过正则表达式获得YouTube视频Embed代码

比如我要获取下面这个视频地址的Embed代码,这首歌很好听滴。

$url = 'http://www.youtube.com/watch?v=KRlOLZ0H4ck&feature=related';
preg_match("/v=([^&]+)/i", $url, $matches);
$id = $matches[1]; //获取视频ID

//输出iframe类型的embed代码
echo '<iframe width="640" height="480" src="http://www.youtube.com/embed/'.$id.'" 
frameborder="0" allowfullscreen></iframe>';

iframe代码看起来更简洁,但百度经常对iframe表现敌意,至少在百度的SEO建议中是这样,那就选用YouTube的传统Embed方式,代码如下

$url = 'http://www.youtube.com/watch?v=KRlOLZ0H4ck&feature=related';
preg_match("/v=([^&]+)/i", $url, $matches);
$id = $matches[1]; //获取视频ID

echo '<object width="640" height="480">
	<param name="movie" value="http://www.youtube.com/v/' . $id . '?version=3&amp;hl=en_US"></param>
	<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
	<embed src="http://www.youtube.com/v/' . $id . '?version=3&amp;hl=en_US" type="application/x-shockwave-flash" 
	width="640" height="480" allowscriptaccess="always" allowfullscreen="true"></embed></object>';

在WordPress中如何实现

WordPress中实现上述功能更加简单,只要利用oembed就可以。

什么是oembed?

首先打开设置->媒体,找到自动嵌入功能,勾选即可开启oembed功能。

oembed

这时如果在Post或者Page编辑器中输入YouTube视频地址,就可以自动转换成embed代码。如下所示

编辑器中的内容

editor-content

实际查看的效果

实际查看时YouTube地址被转换

oembed的强大之处

强悍之一

支持多个视频网站,包括(详情请参阅Codex: oembed

强悍之二

可以轻松增加视频网站,只需要使用函数wp_oembed_add_provider()

wp_oembed_add_provider( $format, $provider, $regex );

强悍之三

如果oembed只能用于post或者page,似乎还有些美中不足。其实oembed在摘要或自定义字段(custom fields)中同样可以工作,自定义数据表中存储的url也可以被转换。

例如,自定义数据表,表中有一个字段存储了视频url,只需要三行代码就可以转换成相应的embed代码

$url = 'http://www.youtube.com/watch?v=KRlOLZ0H4ck&feature=related';

//转换代码
require_once( ABSPATH . WPINC . '/class-oembed.php' );
$oembed = _wp_oembed_get_object();
echo $oembed->get_html($url);	

用这种方式,不仅可以转换YouTube,还能转换其它支持的视频网站url,不用再去想用户到底填了哪个视频网站的url。

结语

将YouTube地址转换为embed代码推荐使用oembed的方式,一则,当YouTube embed代码更新时,WordPress也会更新oembed,不用担心客户的网站无法正常转换视频。而来,oembed是一个开源的PHP Class,也就是说任何PHP系统都可以使用oembed转换地址,非常方便。

如果对oembed感兴趣,可以阅读一下http://oembed.com/

参考网站

如何修改oembed中的HTML代码格式

How to modify the HTML formatting of an oEmbed link?

如何判断视频地址是否被oembed支持

Is there a built in function to see if a URLis oEmbed Compatible?

通过oembed获取视频缩略图

Generating Thumbnails for video