我已获得以下信息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获取视频图像,以便将其设置为特色图像?
最合适的回答,由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\');