WordPress Plugin: Import External Images 2

A treat for site migrators and people with loads of remotely hosted images that need to be imported into a WordPress site. Import External Images 2, the VR51 edition, is our latest WordPress plugin.

Our plugin is based on code released by Marty Thornley. Marty’s Import External Images plugin was in need of maintenance. We stepped up to the plate to fork the code and upgrade the plugin.

In a nutshell, Import External Images VR51 will scan all posts and all pages to look for any images that are hosted on an external server. The plugin will offer to import those images into your own WordPress media library. The image links within any affected posts or pages are then updated to point to the locally hosted file.

This plugin is useful mainly to people who have hotlinked someone else’s images or moved a website from Blogger or WordPress.com to a self hosted WordPress site.

The plugin download link is at the bottom of this post.

How Import External Images Works

The plugin has two modes of operation:

  1. Use it within the post/page editor screen to import externally hosted files one article at a time, or
  2. Use it to bulk import externally hosted files by visiting the plugin’s admin page at Media > Import Images.

Import External Images follows a simple routine:

  • Scan posts and pages for any external image files and PDF files
  • Download any external files
  • Update the URL of the file to point to the downloaded copy

The plugin scans for PNG, JPG, JPEG, GIF, BMP and PDF files. Other file types are not currently supported. We will consider requests (links to WP Service Masters) to add new file types.

Plugin FAQs

You will want to use this plugin if your site displays images that are hosted on another website and you want to host them locally.

You might want to host all images locally because you are worried the 3rd party image host is about to go offline or because you are worried the 3rd party site will change the image or delete it.

You host images on Photobucket and wish to cancel your service subscription so need to download your images to your own website.

Faults in the plugin showed over the years. The maintainer of the original plugin code stopped offering support and stopped releasing bug fixes several years ago. We needed to use the plugin for our own purposes so we opted to fix the code.

The new plugin will collect files from both HTTP and HTTPS resources. The old plugin could only fetch images from HTTP resources (no S).

The new plugin has a new options screen where you can select the number of images to fetch per post each plugin run and the number of articles to process each plugin run. This allows you to configure the plugin to work better within host environments with tight PHP resource allowances.

The old plugin had hardcoded limits set for the number of posts and images to process each run. These hardcoded limits were ignored by the original plugin code’s bulk updater. We fixed that.

The core code has been updated to remove silent errors in the code such as undeclared variables.

Redundant code has been removed from the plugin.

The new plugin uses fewer files. We merged two files to simplify the code structure. We replaced the plugin’s own spinner.gif image with the WordPress core loading.gif image.

There new plugin has a number of improvements over the old plugin.

The options page allows you to,

  1. Set the number of files to import and external links to process per post/page (1 to 20).
  2. Set the number of posts and pages to process per file import run (1 to 50).
  3. Set which domains the plugin should ignore when fetching for external files to process.
  4. View a list of posts and pages that contain external image and PDF files.

Imports stop prematurely if the web server times out before the import process has completed.

Login to your web server and adjust the PHP settings to improve server performance. If you use cPanel, after login,

  • Search for Select PHP Version and click the button when it appears.
  • In the PHP settings screen, click the link ‘Switch to PHP Options
  • Increase the values for max_execution_time, memory_limit, post_max_size and upload_max_size. Set them to 600, 192, 128 and 128, respectively. The value for max_input_time should be set to -1. Save the new values.

If you change the PHP version to 7.1 or 7.2 (remember to click ‘Set as Default’) you will get better server performance. You will need to adjust the PHP options again if you change the PHP version. If your website fails to work with PHP 7.1 or 7.2 because of an old plugin or theme, just switch back to PHP 5.6.

This happens when the web server times out early. See the answer to the question ‘Why do imports stop early?’ for the solution.

How to use Import External Images



Visit the plugin’s options page at Media > Import Images to configure the plugin and to view articles that contain externally hosted files.

  1. Bulk import external images and PDFs from the options page by clicking the Import Images button, or
  2. Import files into each post individually by clicking the edit post link next to each post shown in the Import Images page.

Any page or post that contains externally hosted image files or PDF files will now display an Image Import metabox below the Publish metabox near the top right of the editor screen. Select the option to import files where image files are shown ready for import.

The number shown next to posts in the import table and within the import metabox in the editor screen tells the number of links to be processed. This is not the same number as the number of externally hosted files. The plugin counts together both the number of remotely hosted files and their associated hyper-links. Run the import process as many times as required until this number reaches zero otherwise you may end up with imported files that still link to their external locations.

Adjust the plugin options to improve the file download experience on low resource web servers.

Use Import External Images 2 when you have a ton of image and PDF files in your content but those files are hosted on a 3rd party service and you need to automatically download those files to your own server and to automatically relink to the locally hosted files.


Questions, Suggestions and Tips?

Comment below or raise an issue on Github.

Sharing is caring!

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

newest oldest most voted
Notify of

Thank you so much for the plugin. I and having an issue where the process column is not showing anything and so I can not process the images


Thanks for this excellent script. Although I’m having a really odd issue. The script appears to run fine and replaces the image value in the post, adds the image to the media library, and adds the image file to the server. However the image itself actually isn’t shown… it isn’t even an image. When I try to view the new image file on the server it is actually spam html file for some website ( complete with Google Analytics tracking code and everything). These images are coming from our old site on another host. I’ve scanned the files over there… Read more »

Thanks for updating the plugin, but I’m having a problem where it doesn’t seem to recognize or import jpegs that have spaces in the filename. This is happening per post. Also the site-wide import is stalling for us, and wonder if this might be the reason.

Kevin Roth

Would you consider adding this plugin to the wordpress.org plugins library so that my sites will notify my when there are updates? https://wordpress.org/plugins/developers/add/


Plugin is great, but it keeps rerunning the same posts, and doesn’t move on to the next batch….

dan juan

i have same case with you, do you solve the issues?


how to use it?
this just have one setting in post?

Muhammad Waqas

HI Lee!
This is great plugin.
Although When i import image it reduce image size. image loses original size.
Please lee help me.