Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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.

Thanks Simon

share|improve this question

1 Answer 1

up vote 13 down vote accepted

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.

share|improve this answer
1  
that is absolutely fantastic john, thank you so much - it works perfectly. the throttling is not an issue as i've set it to wait for a keypress after each post import to give us a chance to manually check the details and note any problematic ones. –  Simon Blackbourn Mar 18 '11 at 15:28
    
just because I needed the Id of the attachment to be connected to another post, here is a good way to do that –  axel Sep 15 at 9:18

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.