<?php function wp_insert_attachment_from_url( $url, $parent_post_id = null ) { if ( ! class_exists( 'WP_Http' ) ) { require_once ABSPATH . WPINC . '/class-http.php'; } $http = new WP_Http(); $response = $http->request( $url ); if ( 200 !== $response['response']['code'] ) { return false; } $upload = wp_upload_bits( basename( $url ), null, $response['body'] ); if ( ! empty( $upload['error'] ) ) { return false; } $file_path = $upload['file']; $file_name = basename( $file_path ); $file_type = wp_check_filetype( $file_name, null ); $attachment_title = sanitize_file_name( pathinfo( $file_name, PATHINFO_FILENAME ) ); $wp_upload_dir = wp_upload_dir(); $post_info = array( 'guid' => $wp_upload_dir['url'] . '/' . $file_name, 'post_mime_type' => $file_type['type'], 'post_title' => $attachment_title, 'post_content' => '', 'post_status' => 'inherit', ); // Create the attachment. $attach_id = wp_insert_attachment( $post_info, $file_path, $parent_post_id ); // Include image.php. require_once ABSPATH . 'wp-admin/includes/image.php'; // Generate the attachment metadata. $attach_data = wp_generate_attachment_metadata( $attach_id, $file_path ); // Assign metadata to attachment. wp_update_attachment_metadata( $attach_id, $attach_data ); return $attach_id; } ?>
This above code return $attach_id. By using this attach id we can easily set post thumbnail image by using below code
set_post_thumbnail( int|WP_Post $post, int $thumbnail_id )