'attachment', 'post_status' => 'inherit', 'meta_query' => array( array( 'key' => '_import_source', 'value' => $url, 'compare' => '=', ), ), ) ); if( $attachments->have_posts() ){ foreach ( $attachments->posts as $post ) { $attachment_url = wp_get_attachment_url( $post->ID ); return array( 'id' => $post->ID, 'url' => $attachment_url, ); } } return false; } /** * Handle Import file, and return File ID when process complete * * @param string $url URL of file. * * @return int|null */ public static function handle_file( $url ) { $file_name = basename( $url ); $upload = wp_upload_bits( $file_name, null, '' ); self::fetch_file( $url, $upload['file'] ); if ( $upload['file'] ) { $file_loc = $upload['file']; $file_name = basename( $upload['file'] ); $file_type = wp_check_filetype( $file_name ); $attachment = array( 'post_mime_type' => $file_type['type'], 'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $file_name ) ), 'post_content' => '', 'post_status' => 'inherit', ); include_once ABSPATH . 'wp-admin/includes/image.php'; $attach_id = wp_insert_attachment( $attachment, $file_loc ); update_post_meta( $attach_id, '_import_source', $url ); try { $attach_data = wp_generate_attachment_metadata( $attach_id, $file_loc ); wp_update_attachment_metadata( $attach_id, $attach_data ); } catch ( \Exception $e ) { // none } catch ( \Throwable $t ) { // none } return array( 'id' => $attach_id, 'url' => $upload['url'], ); } else { return null; } } /** * Download file and save to file system * * @param string $url File URL. * @param string $file_path file path. * @param string $endpoint Endpoint. * * @return array|bool */ public static function fetch_file( $url, $file_path, $endpoint = '' ) { $http = new \WP_Http(); $response = $http->get( add_query_arg( array( 'sslverify' => false, ), $url ) ); if ( is_wp_error( $response ) ) { return false; } $headers = wp_remote_retrieve_headers( $response ); $headers['response'] = wp_remote_retrieve_response_code( $response ); if ( false === $file_path ) { return $headers; } $body = wp_remote_retrieve_body( $response ); // GET request - write it to the supplied filename. require_once ABSPATH . 'wp-admin/includes/file.php'; WP_Filesystem(); global $wp_filesystem; $wp_filesystem->put_contents( $file_path, $body, FS_CHMOD_FILE ); return $headers; } }