Skip to main content
2 of 6
added 243 characters in body
Rob Vermeer
  • 5.2k
  • 2
  • 29
  • 21

You can set an image as post thumbnail when it is in your media library. To add an image in your media library you need to upload it to your server. WordPress already has a function for putting images in your media library, you only need a script that uploads your file.

$upload_dir = wp_upload_dir();
$image_data = file_get_contents($image_url);
$filename = basename($image_url);
if(wp_mkdir_p($upload_dir['path']))
    file_put_contents($upload_dir['path'] . '/' . $filename, $image_data);
else
    file_put_contents($upload_dir['basedir'] . '/' . $filename, $image_data);

$wp_filetype = wp_check_filetype($filename, null );
$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => sanitize_file_name($filename),
    'post_content' => '',
    'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $filename, $post_id );
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );

set_post_thumbnail( $post_id, $attach_id );

$post_id is the variable for the ID you got from wp_insert_post()

http://codex.wordpress.org/Function_Reference/wp_upload_dir

http://codex.wordpress.org/Function_Reference/wp_insert_attachment


EDIT: Added path creation

http://codex.wordpress.org/Function_Reference/wp_mkdir_p

Rob Vermeer
  • 5.2k
  • 2
  • 29
  • 21