Using WordPress ‘media_sideload_image()’ PHP function

The media_sideload_image() WordPress PHP function downloads an image from the specified URL, saves it as an attachment, and optionally attaches it to a post.

Usage

$url = "https://example.com/image.jpg";
$post_id = 1;
$desc = "Example image";
$return_type = 'html';
$image = media_sideload_image($url, $post_id, $desc, $return_type);

Parameters

  • $file (string) Required: The URL of the image to download.
  • $post_id (int) Optional: The post ID the media is to be associated with.
  • $desc (string) Optional: Description of the image. Default: null
  • $return_type (string) Optional: Accepts ‘html’ (image tag html) or ‘src’ (URL), or ‘id’ (attachment ID). Default ‘html’.

More information

See WordPress Developer Resources: media_sideload_image

Examples

Basic Usage

Download an image and attach it to a post with a custom description.

$url = "https://example.com/image.jpg";
$post_id = 1;
$desc = "Example image";
$image = media_sideload_image($url, $post_id, $desc);

Return Image URL

Download an image and return the image URL instead of the HTML.

$url = "https://example.com/image.jpg";
$post_id = 1;
$desc = "Example image";
$image_url = media_sideload_image($url, $post_id, $desc, 'src');

Return Attachment ID

Download an image and return the attachment ID instead of the HTML.

$url = "https://example.com/image.jpg";
$post_id = 1;
$desc = "Example image";
$attachment_id = media_sideload_image($url, $post_id, $desc, 'id');

Add Custom File Extension

Download a custom file type (e.g., mp3) by adding it to the accepted extensions.

add_filter('image_sideload_extensions', function ($accepted_extensions) {
    $accepted_extensions = 'mp3';
    return $accepted_extensions;
});

Find Attachment ID from Image URL

Find the attachment ID from the image URL after using the media_sideload_image() function.

function fetch_attachment_post_id_from_src($image_src) {
    global $wpdb;
    $query = "SELECT ID FROM {$wpdb->posts} WHERE guid=%s";
    $id = $wpdb->get_var($wpdb->prepare($query, $image_src));
    return $id;
}

$url = "https://example.com/image.jpg";
$post_id = 1;
$desc = "Example image";
$image_url = media_sideload_image($url, $post_id, $desc, 'src');
$attachment_id = fetch_attachment_post_id_from_src($image_url);