Programmatically get images by URL and save in uploads folder

I am involved in a large migration from another CMS to WordPress. We have a copy of the database and have worked out how to extract the content and programmatically create WordPress posts from it using an instantiation of the wpdb class.

However, there are a couple of thousand images which we would like to pull across automatically, generate the various sizes, and then attach to the posts, to save about a week’s work!

Is there a way I can get an image from a remote site by URL and save it in my wp-uploads folder? I guess this uses wp_http but I’m unfamiliar with that.

Once I’ve got the image and saved it I’m ok as I can then use wp_generate_attachment_metadata to create the various sizes and wp_insert_attachment to attach it to a post.



There’s actually a great function that will do all three of those things for you:

media_sideload_image( $url, $post_id, $description );

The first argument is the remote url of the image you want to download. The second argument is the post id of the post to which you want to attach the image. The third argument is optional, but will be a description if included.

I’d suggest finding a way to throttle the downloads so that you don’t keep timing out, such as limiting the number of images it pulls in per load and setting the importer to refresh itself between downloads, or using AJAX to do them one at a time asynchronously.

Leave a Comment