Delayed Image Import testing
Testing › Delayed Image Import
Last full run: version 2.35.3 · 11 November 2026
Summary
Delayed Image Import makes imports faster by not downloading product images during the import. The image addresses are stored, your shop shows the supplier’s image straight away, and the real downloads happen later: when the product is opened, from a background queue, or from WP-CLI. This page lists the test suites we run for it, what each one proves, and the result of the last full run. Every suite runs on its own WordPress test site with WooCommerce and HPOS order storage switched on.
The images in these tests are real image files served by a small supplier server on the test machine. No outside image host is contacted, and the main test site blocks every other outgoing request. A test passes only when the stored products, the downloaded files, the page markup or what a real browser shows is right, not when the plugin merely reports success.
The release run
| Suite | What it proves | How it runs |
|---|---|---|
| Downloading images | A waiting image is downloaded over real HTTP, even from an address with no file extension, and its smaller sizes are created. Something that is not an image is refused. The same image used by several products is downloaded once and shared, and a featured image is not repeated in the gallery. Two downloads running at the same moment, for the same product or for two products sharing one image, still produce exactly one copy. A download left unfinished by a crashed process does not block that image for ever. The index of image addresses is built on upgrade, kept in step as images change, and used to spot images that already exist. | WordPress itself, with separate PHP processes for the simultaneous downloads |
| Background queue | The queue downloads the most viewed products first, in batches of the size you set, and takes turns between supplier hosts. A failed download is retried with growing gaps and longer time limits, a supplier that keeps failing is rested, and an image that never succeeds moves to the Failed list with its full history. Pause and resume work, and queues saved by older versions are carried over. Retrying a failed gallery image keeps every image’s alt text and caption with the right image. | WordPress itself and WP-Cron |
| Product pages before download | While an image is waiting, the shop shows the supplier’s image without downloading anything or changing the product. It carries a usable width and height, so WooCommerce’s gallery, hover zoom and enlarged lightbox show the image instead of a black screen. Blocked hosts, forced HTTPS and the show-broken-images option behave as set. | WordPress itself, rendering WooCommerce’s own gallery template |
| Super Speedy Imports integration | A real Super Speedy Imports CSV import with image downloads delayed stores the image addresses and downloads nothing. The images then download later in the right order, with alt text and captions still matched to the right image, including blank positions, commas inside alt text and both comma and pipe separated lists. It also checks that the Imports hooks this plugin relies on still exist, so a rename in Imports fails loudly instead of quietly downloading every image during the import. | Super Speedy Imports’ own import code, then WP-CLI |
| Settings, licence and AI tools | Every number setting at its lowest and highest value, saved the same way from the settings screen and through the AI tools. The licence check sends the right product and version, and a user without permission cannot install anything. The AI tools refuse anonymous visitors. | WordPress itself |
| WP-CLI | The wp dii commands report the exact queue, dry runs change nothing, a limit leaves the next product waiting, and the queue drains completely even while a supplier is being rested. | WP-CLI |
| Browser, classic theme | Real product pages on the Storefront theme, at desktop and phone width: the featured image, the gallery and both together. Thumbnails switch the right slide, the lightbox opens and reopens, the hover zoom works, a broken image is replaced by a visible placeholder, and the shop page, widgets and product blocks show the images. A visitor’s view sends no download request to the supplier and leaves the waiting images untouched. | Browser |
| Browser, block theme | The same journey on a block theme, Twenty Twenty-Four. | Browser |
| Admin screen | Every tab opens, duplicate images are listed, Retry downloads a failed image, Pause and Resume stick, settings save, and the screen works at phone width. | Browser, logged in as an administrator |
| Admin screen at shop scale | With 100,000 downloaded images, 20,000 products waiting and 2,860,019 metadata rows, every tab loads within 5 seconds, page 500 of each list loads, the duplicate finder answers, and the lookups each download makes stay fast. | Browser and direct requests |
| AI tools over HTTP | A real authenticated MCP connection finds and runs the plugin’s three tools. A logged-in Subscriber and an anonymous visitor are refused and get no data. | HTTP |
| Security regressions | The fixes from our November 2026 security review keep working: a Contributor cannot make the site download an image, opening someone else’s post does not download its images, and text supplied with an image cannot carry script into the media library. | Real wp-admin requests |
| Cache purge and view counter | When an image finishes downloading, the product’s cached pages are purged so visitors see the new image. Five views in a minute update the view counter once, not five times. | Real wp-admin and visitor requests |
Last full run: version 2.35.3
Run on 11 November 2026 with WooCommerce and HPOS.
| Suite | Result |
|---|---|
| Downloading images | 63 of 63 passed |
| Background queue | 37 of 37 passed |
| Product pages before download | 65 of 65 passed |
| Super Speedy Imports integration | 92 of 92 passed |
| Settings, licence and AI tools | 78 of 78 passed |
| WP-CLI | 6 of 6 passed |
| Browser, classic theme | 112 of 115 passed. The 3 failures were in the test itself, not the plugin; the test was fixed and the whole suite passed 115 of 115 when re-run (below) |
| Browser, block theme | 112 of 115 passed, the same 3 failures. Re-run after the fix: 115 of 115 passed |
| Admin screen | 15 of 15 passed |
| Admin screen at shop scale | 33 of 33 passed |
| AI tools over HTTP | 9 of 9 passed |
| Security regressions | 6 of 6 passed |
| Cache purge and view counter | 3 of 3 passed |
The three failures, and their fix
The same check failed for the featured, gallery and mixed products, in both browser suites, at desktop width only: that a visitor’s view leaves the product’s waiting image details untouched. The fault was in the test, not the plugin. Each product page view adds one to a view counter, which the queue uses to download the most viewed products first. The test already allowed for that counter. Since version 2.35.2 the counter also stores the time of the last counted view, so that several views in a minute count once. The test did not allow for that time, and nothing else on the product changed. The phone-width pass came within the same minute, so the time was not written again and those checks passed.
The test now allows for the counter’s time as well. It still checks every waiting image detail, and it still fails when a page view deliberately changes one of them. After the fix both browser suites were re-run in full and passed 115 of 115. The plugin code was not changed, so the version is still 2.35.3.
Not part of this run
- The install check on the download itself. A separate check installs the built ZIP file on a fresh site. It runs when a release is packaged, not as part of this run. These suites run on the plugin code.
- The deliberate-break check. A separate run serves a smaller image than expected to prove the image size checks fail when they should. It is meant to fail, so it is not counted here.
What the tests do not cover
- The latest Super Speedy Imports. The Imports integration tests use fixed older copies of Super Speedy Imports (versions 2.89.1 and 2.91.5), kept so a result can be compared from run to run. The current Imports release is not part of this run.
- Other import plugins. Delayed Image Import works with any importer that can save custom fields. Only Super Speedy Imports is tested by name; other importers are covered only through the custom fields they would write.
- Real supplier hosts. Images come from a supplier server on the test machine. Slow, failing and refused downloads are tested against it, not against real image hosts or CDNs.
- Your server. Tests run on our development machine with one PHP version and one MariaDB version, not every host and database you might use.
- Every theme and plugin. The browser tests use Storefront and Twenty Twenty-Four. Other themes, gallery plugins and caching plugins on your site are not tested; the cache purge test checks that the purge is requested, not each caching plugin’s response to it.
