为您提供了一个漂亮的小解析功能:
function wpse44048_parse_video_link( $link ) {
$url = \'some url\'; // pass this in
$parsed_url = parse_url( $url );
$host = $parsed_url[\'host\'];
// check that the service exists, otherwise return false
if( strpos( $host, \'youtube.com\' ) !== false
&& strpos( $host, \'youtu.be\' ) !== false
&& strpos( $host, \'vimeo.com\' ) !== false ) {
return false;
}
// set $service
if( strpos( $host, \'youtube.com\' ) !== false
|| strpos( $host, \'youtu.be\' ) !== false ) {
$service = \'youtube\';
}
if( strpos( $host, \'vimeo.com\' ) !== false ) {
// handle vimeo
$service = \'vimeo\';
}
// set $video_id
if( strpos( $host, \'youtube.com\' ) !== false ) {
// handle youtube regular url
$vars = array();
parse_str( $parsed_url[\'query\'], $vars );
$video_id = $vars[\'v\'];
}
if( strpos( $host, \'youtu.be\' ) !== false ) {
// handle youtube shortened URL
$video_id = $parsed_url[\'path\'];
}
if( strpos( $host, \'vimeo.com\' ) !== false ) {
// handle vimeo
$video_id = $parsed_url[\'path\'];
}
return array(
\'service\' => $service, // youtube or vimeo
\'id\' => $video_id // the id of the video
);
}
没有测试,但我是基于
this stackoverflow answer. 该函数是可扩展的,尽管您可能想重写它。我写它是为了使用集中的服务值,所以
youtube.com
和
youtu.be
链接不会返回其他
service
如果你改变了它们,但你肯定可以做生存检查,设置
$service
, 并设置
$video_id
一应俱全
if
,
elseif
,
else
组不过,总的概念是为您准备的。