从嵌入的YouTube视频中设置帖子的特色图片

时间:2011-08-13 作者:Piku

如果我创建的帖子中嵌入了YouTube视频(所以我所做的就是将YouTube URL粘贴到帖子中,让Wordpress自动为我嵌入),有没有办法将视频的缩略图设置为帖子的特色图像?

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

不是天生的。你必须编写一些代码来实现它-有一个很好的pastebin 提供必要代码的函数。

Edit (12/19/2011):

是的,下面是如何通过编程实现这一点。将以下两个函数添加到函数中。php文件,你应该很好去。对代码进行了注释,以解释发生了什么,但这里有一个高级别的预期:

你必须。。。

在内容中创建帖子,包括YouTube URL,代码将。。。

从内容中解析URL将获取它找到的第一个URL,并假定它是YouTube URL从远程服务器获取缩略图并下载它,将其设置为当前帖子的缩略图请注意,如果在帖子中包含多个URL,则需要修改代码以正确查找YouTube URL。这可以通过遍历$attachments 收集并嗅出什么URL看起来像YouTube URL。

function set_youtube_as_featured_image($post_id) {  

    // only want to do this if the post has no thumbnail
    if(!has_post_thumbnail($post_id)) { 

        // find the youtube url
        $post_array = get_post($post_id, ARRAY_A);
        $content = $post_array[\'post_content\'];
        $youtube_id = get_youtube_id($content);

        // build the thumbnail string
        $youtube_thumb_url = \'http://img.youtube.com/vi/\' . $youtube_id . \'/0.jpg\';

        // next, download the URL of the youtube image
        media_sideload_image($youtube_thumb_url, $post_id, \'Sample youtube image.\');

        // find the most recent attachment for the given post
        $attachments = get_posts(
            array(
                \'post_type\' => \'attachment\',
                \'numberposts\' => 1,
                \'order\' => \'ASC\',
                \'post_parent\' => $post_id
            )
        );
        $attachment = $attachments[0];

        // and set it as the post thumbnail
        set_post_thumbnail( $post_id, $attachment->ID );

    } // end if

} // set_youtube_as_featured_image
add_action(\'save_post\', \'set_youtube_as_featured_image\');

function get_youtube_id($content) {

    // find the youtube-based URL in the post
    $urls = array();
    preg_match_all(\'#\\bhttps?://[^\\s()<>]+(?:\\([\\w\\d]+\\)|([^[:punct:]\\s]|/))#\', $content, $urls);
    $youtube_url = $urls[0][0];

    // next, locate the youtube video id
    $youtube_id = \'\';
    if(strlen(trim($youtube_url)) > 0) {
        parse_str( parse_url( $youtube_url, PHP_URL_QUERY ) );
        $youtube_id = $v;
    } // end if

    return $youtube_id; 

} // end get_youtube_id
需要注意的一点是,这假设您的帖子没有帖子缩略图,并且一旦设置了帖子缩略图,就不会触发。

其次,如果删除帖子缩略图,然后使用媒体上载程序将图像附加到此帖子,则将使用最新的图像。

结束

相关推荐

有没有内置的函数来查看URL是否与oEmbed兼容?

我希望能够获取一个url,看看该域是否是Wordpress支持通过oEmbed添加嵌入的域之一。WordPress中是否有内置函数可以执行此操作,或者我是否需要创建自己的函数?示例:如果我有一个视频网站的url,我希望能够检查该url,并能够判断该域是否受WordPress支持用于嵌入视频。