
External Image Importer automatically uploads externally-hosted images to your Media Library when you paste external content into the WordPress editor, then rewrites every URL to point at your own local copy. It is built SSRF-safe: every remote fetch is validated and hardened before the file is downloaded.
Remove the hassle of importing external images by hand when you:
When you copy or migrate WordPress content between environments – for example from a dev or staging site to your live site – images embedded in that content stay hotlinked to the source domain. The block HTML (or pasted classic-editor markup) keeps pointing at https://dev.example.com/..., so your production pages silently load images from staging. If the source environment is private, password-protected or taken down after launch, those images break.
This plugin fixes that automatically: it finds the external image URLs, pulls the files into your own Media Library, and updates the content so everything is served from your own domain.
Server-side remote fetching is handled with defence in depth:
169.254.169.254. All resolved A/AAAA records must be public.http and https, only ports 80 and 443, and URLs containing embedded credentials (user:pass@) are refused.Paste your content as you normally would, then Publish or Save. When you do, the plugin scans the content for externally-hosted images, securely downloads each one into your Media Library, and rewrites the markup to your local copy at the same size it referenced, so your layout is unchanged.
photo-1024x670.webp), the plugin fetches the full original and lets WordPress regenerate every registered size locally, then points the markup at the matching local size.wp auei localise to sweep content that was saved before the plugin was active, with --dry-run, --post_type, --post_id and --limit options.src, data-src and data-lazy-src attributessrcset (every candidate, with width and density descriptors)url / src / href)background-image: url(...) in inline styleswp_insert_post_data) covers both.This plugin does not phone home and does not send your data to any third party. There are no analytics, no tracking and no external API calls. The only outbound requests it makes are to the image URLs that already appear in your own content, purely to download those images into your Media Library. Nothing about your site, content or visitors is transmitted anywhere else.
All filters use the auei_ prefix.
auei_enabled (bool, default true) – master on/off switch for the whole plugin.auei_whitelisted_domains (string[], default empty) – domains whose images are never imported (left as external), for example a trusted CDN.auei_import_full_size (bool, default true) – import the full-size original (strip a -WxH scaled suffix) so the destination regenerates every size. Set to false to import only the exact file referenced.auei_remap_ids (bool, default true) – rewrite the source-site attachment ID in Gutenberg blocks ("id":N / wp-image-N) to the new local attachment ID.auei_allowed_extensions (string[], default jpg, jpeg, png, gif, webp, avif, bmp) – image extensions eligible for import. svg and ico are excluded by default.auei_allowed_schemes (string[], default http, https) – URL schemes permitted for fetching.auei_allowed_ports (int[], default 80, 443) – explicit ports permitted on a target URL.auei_blocked_ip_ranges (string[], default empty) – extra CIDR ranges to block, in addition to the built-in private/reserved set.auei_max_file_size (int, default 8388608, i.e. 8 MB) – maximum download size in bytes; larger files are rejected.auei_download_timeout (int, default 20) – download timeout in seconds.auei_max_redirects (int, default 3) – maximum HTTP redirects to follow; every hop is re-validated by the SSRF guard.auei_reuse_by_filename (bool, default true) – reuse an existing Media Library image with the same filename (any attachment, not just ones this plugin imported) instead of downloading a duplicate. Matched on the exact stored-file basename.auei_allow_url (true or WP_Error, default validator result) – final override on a per-URL basis; return true to force-allow or a WP_Error to force-block.auei_force_logging (bool, default false) – force debug logging even when WP_DEBUG is off.