diff --git src/wp-admin/includes/media.php src/wp-admin/includes/media.php
index c4090174f..4a2e7c2e7 100644
--- src/wp-admin/includes/media.php
+++ src/wp-admin/includes/media.php
@@ -852,11 +852,12 @@ function wp_media_upload_handler() {
  *
  * @since 2.6.0
  * @since 4.2.0 Introduced the `$return` parameter.
+ * @since 4.8.0 Introduced the 'id' option within the `$return` parameter.
  *
  * @param string $file    The URL of the image to download.
  * @param int    $post_id The post ID the media is to be associated with.
  * @param string $desc    Optional. Description of the image.
- * @param string $return  Optional. Accepts 'html' (image tag html) or 'src' (URL). Default 'html'.
+ * @param string $return  Optional. Accepts 'html' (image tag html) or 'src' (URL), or 'id' (attachment ID). Default 'html'.
  * @return string|WP_Error Populated HTML img tag on success, WP_Error object otherwise.
  */
 function media_sideload_image( $file, $post_id, $desc = null, $return = 'html' ) {
@@ -886,6 +887,9 @@ function media_sideload_image( $file, $post_id, $desc = null, $return = 'html' )
 		if ( is_wp_error( $id ) ) {
 			@unlink( $file_array['tmp_name'] );
 			return $id;
+		// If attachment id was requested, return it early.
+		} elseif ( $return === 'id' ) {
+			return $id;
 		}
 
 		$src = wp_get_attachment_url( $id );
