通过嵌入式YouTube视频设置帖子的特色图片


15

如果我创建的帖子中嵌入了YouTube视频(因此,我要做的就是将YouTube URL粘贴到该帖子中,然后让Wordpress自动为我嵌入),是否可以将视频的缩略图设置为帖子的特色图片?

Answers:


17

不是本地的。您必须编写一些代码才能实现它-有一个不错的pastebin函数,它提供了完成此任务所需的代码。

编辑(12/19/2011):

是的,这是您可以通过编程方式执行此操作的方法。将以下两个函数添加到您的functions.php文件中,您应该会很好。该代码已被注释以解释发生了什么,但是这里有一个很高的期望值:

你必须...

  • 建立讯息
  • 在内容中,添加YouTube URL

该代码将...

  • 从内容中解析URL
  • 将抓取它找到的第一个URL并假定它是一个YouTube URL
  • 从远程服务器上获取缩略图并下载
  • 将其设置为当前帖子的缩略图

请注意,如果您的帖子中包含多个URL,则需要修改代码以正确找到YouTube URL。这可以通过遍历$attachments集合并嗅探出看起来像YouTube URL的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

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

其次,如果您删除帖子缩略图,然后使用媒体上传器将图像附加到帖子,则将使用最新图像。


很棒的代码段,但是既然谁知道从现在开始还会出现-请尝试至少在答案中包含摘要(如果完整代码太多)(例如“使用此代码获取缩略图,然后下载并附加”)。
罗斯特2011年

1
请注意,jetpack包含一个名为的方法get_youtube_id,如果您将jetpack与上述代码一起使用,则500个服务器将使您的应用程序出错。如果您重命名功能,它会工作都OK
麦克Vormwald
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.