剥离和/或更改自定义域的内容(视频URL)

时间:2012-03-01 作者:Tom

我正在制作一个主题,其中一些帖子有相关视频,来自Vimeo或YouTube。目前,用户可以通过将视频ID添加到两个自定义字段中的一个,即“YouTube”和“Vimeo”,将其添加到帖子中。然后,我的主题将这些信息添加到这些站点的标准嵌入代码中,并将其输出到帖子页面。

然而,如果可能的话,我想让网站的用户更容易使用。我想用一个自定义字段替换这两个字段,并允许他们在Vimeo或YouTube上输入视频的完整URL(而不是ID)。

我认为这需要两件事:首先,URL被识别为来自Vimeo或YouTube,其次,URL的其余部分被剥离,以便我可以使用ID在贴子页面上输出嵌入的视频。

我知道有很多插件可以自动完成这类事情(以及其他类似的事情),但如果可能的话,我更喜欢内置插件。

我不是一个PHP向导,所以我还没有冒险做任何事情,但我希望这可以通过一些函数实现。php魔术。

有人对最好的方法有什么想法吗?

谢谢

1 个回复
SO网友:mor7ifer

为您提供了一个漂亮的小解析功能:

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.comyoutu.be 链接不会返回其他service 如果你改变了它们,但你肯定可以做生存检查,设置$service, 并设置$video_id 一应俱全if, elseif, else 组不过,总的概念是为您准备的。

结束

相关推荐

使用functions.php使子菜单项成为管理菜单中的主链接

我正在尝试使用这些函数自定义管理区域。php文件,使我的客户更容易处理。我之前收到的一个请求是将一些子菜单移到主导航中,希望能够完成。例如,我想让小部件和菜单出现在主导航中,而不是作为外观的子菜单。然后,我将一起删除“外观”选项卡。我已经能够删除选项卡,但无法为小部件和菜单创建新按钮。即使我可以得到帮助,而不是从技术上移动它们,而是创建一个新按钮并自己设置链接(例如,对于菜单->/nav Menus.php)。这有可能吗?谢谢