How to retrieve image from URL and set as featured image/post thumbnail

Given a Vimeo ID, I can retrieve a thumbnail from the video via Vimeo Simple API. Rather than call the API every time my page loads I want to set the image as the post thumbnail using the save_post hook (similar to this question).

My problem is that I am not familiar with URL calls in php. I would like to know:

  1. the benefits/drawbacks of using a method like curl compared to WP_Http. Is one “better” than the other?

  2. the order in which I should call functions to successfully set the post thumbnail.

Any help would be greatly appreciated.

2

My favorite way of handling this problem has been to use a little documented function I discovered on another stack post: media_sideload_image

It works by fetching an image url to the WordPress upload dir and then associating the image to a post’s attachments.

You can try it like so:

// required libraries for media_sideload_image
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');

// $post_id == the post you want the image to be attached to
// $video_thumb_url == the vimeo video's thumb url
// $description == optional description

// load the image
$result = media_sideload_image($video_thumb_url, $post_id, $description);

// then find the last image added to the post attachments
$attachments = get_posts(array('numberposts' => '1', 'post_parent' => $post_id, 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => 'ASC'));


if(sizeof($attachments) > 0){
    // set image as the post thumbnail
    set_post_thumbnail($post_id, $attachments[0]->ID);
}  

Leave a Comment