如何使用自定义域中存储的YouTube URL获取视频图像并将其设置为特色图像

时间:2013-07-26 作者:Oudin

我已获得以下信息code 它捕获放置在内容/正文中的YouTube视频的URL,然后代码从YouTube获取视频图像,并将图像设置为特征图像。

    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
但是,我没有将YouTube URL放在正文中,而是使用自定义字段来存储URL。可通过以下代码访问

$vidlink = get_post_meta($post->ID, \'ci_cpt_video_link\', true);
如何修改初始代码以使用存储在自定义字段中的YouTube URL从YouTube获取视频图像,以便将其设置为特色图像?

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成
function set_youtube_as_featured_image($post_id) { 

  if(  has_post_thumbnail($post_id) ) return;

  $url = get_post_meta($post_id, \'ci_cpt_video_link\', true);

  if ( $url && filter_var($url, FILTER_VALIDATE_URL) ) {

    // getting thumb url from video url
    parse_str( parse_url( $url, PHP_URL_QUERY ), $youtube_vars );
    $youtube_id = $youtube_vars[\'v\'];
    $youtube_thumb_url = \'http://img.youtube.com/vi/\' . $youtube_id . \'/0.jpg\';

    // download and save thumb
    $get = wp_remote_get( $youtube_thumb_url );
    $mime_type = wp_remote_retrieve_header( $get, \'content-type\' );
    if ( ! substr_count($mime_type, \'image\') ) return false;
    $name = \'youtube-thumb-post-\' . $post_id . \'.jpg\';
    $bits = wp_upload_bits( $name, \'\', wp_remote_retrieve_body( $get ) );
    if ( $bits[\'error\'] ) return false;

    // save attachment post, and setting as post thumbnails
    $thumb_data = array(
      \'post_title\'=> \'Youtube Preview\', \'post_mime_type\' => $mime_type
    );    
    $thumbnail_id  = wp_insert_attachment( $thumb_data, $bits[\'file\'], $post_id );
    if ( $thumbnail_id ) {
      require_once(ABSPATH . \'wp-admin/includes/image.php\');
      $metadata = wp_generate_attachment_metadata( $thumbnail_id, $bits[\'file\'] );
      wp_update_attachment_metadata( $thumbnail_id, $metadata );
      set_post_thumbnail( $post, $thumbnail_id );
    }

  }
}

add_action(\'save_post\', \'set_youtube_as_featured_image\');
SO网友:Chozen

实现此目标的最简单方法是使用"Video Thumbnails" plugin.

只需激活它,然后在设置区域中指定存储YouTube URL的自定义字段。

当您发布帖子时,它会将图像保存到WordPress媒体库中,并且可以在安装插件之前扫描并生成发布帖子的缩略图。

结束

相关推荐

将wmode属性设置为透明,以便嵌入快捷代码使下拉菜单悬停在Internet Explorer中嵌入的YouTube上

当您使用IE8或IE9将鼠标悬停在我的下拉菜单上时,菜单div将显示在YouTube嵌入的后面。它可以在所有其他浏览器上正常工作。经过研究,我发现还有很多人the same problem 解决方案是设置wmode 把某事归因于某人transparent. 比如说<iframe width=\"578\" height=\"325\" src=\"http://www.youtube.com/embed/XXXX?wmode=transparent\"></iframe> 或<