问题描述

如果我创建了一个包含嵌入式 YouTube 视频的帖子 (所以我所做的就是将 YouTube 网址粘贴到帖子中,让 Wordpress 自动为我嵌入),是否有一种方法可以将视频的缩略图设置为该帖子的特色图片?

最佳解决方案

不是天生的。您必须编写一些代码才能实现 – 有一个很好的 pastebin 函数可以提供必要的代码来实现。

编辑 (12/19/2011):

这是你可以用编程方式来做的。将以下两个函数添加到 functions.php 文件中,你应该很好去。该代码已被评论以解释发生了什么,但这里有很高的期望值:

你必须…

  • 创建一个帖子

  • 内容中包含 YouTube 网址

代码将…

  • 解析 URL 中的内容

  • 将抓住它找到的第一个网址,并认为它是一个 YouTube 网址

  • 从远程服务器抓取缩略图并下载

  • 将其设置为当前帖子的缩略图

请注意,如果您的帖子中包含多个网址,则需要修改代码才能正确找到 YouTube 网址。这可以通过迭代 $attachments 集合并嗅探出 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()<>]+(?:([wd]+)|([^[: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

有一点需要注意的是,这假设您的帖子没有发布缩略图,一旦设置了缩略图后,它不会触发。

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

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。