You can try the following function to insert image to a post.
Note: The following function will not make the image “featured image”. It will just uploaded the image and attach it to the post.
It will return the attachment id if the upload is successful
function insert_post_media( $post_id, $url){
$tmp = download_url( $url );
$file_array = array();
// Set variables for storage
// fix file filename for query strings
preg_match('/[^\?]+\.(jpg|jpe|jpeg|gif|png)/i', $url, $matches);
$file_array['name'] = basename($matches[0]);
$file_array['tmp_name'] = $tmp;
// If error storing temporarily, unlink
if ( is_wp_error( $tmp ) ) {
@unlink($file_array['tmp_name']);
$file_array['tmp_name'] = '';
}
// do the validation and storage stuff
$id = media_handle_sideload( $file_array, $post_id, $desc );
// If error storing permanently, unlink
if ( is_wp_error($id) ) {
@unlink($file_array['tmp_name']);
$error_string = $id->get_error_message();
echo '<div id="message" class="error">'.$url.'<p>' . $error_string . '</p></div>';
return $id;
}
return $id;
//incase you want to get url of the image
//$src = wp_get_attachment_url( $id );
}