Question

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

Was it helpful?

Solution

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.

OTHER TIPS

John's answer is correct re: using media_sideload_image, just note that you may need to require these scripts before if you aren't doing this within the context of WP Admin:

require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');

See https://codex.wordpress.org/Function_Reference/media_sideload_image#Notes

Licensed under: CC-BY-SA with attribution
Not affiliated with wordpress.stackexchange
scroll top