Opens in a new tab
Documentation

Bulk Media Uploader

Upload dozens of product images in one go without the browser hanging or the server running out of memory. Images upload one at a time, get SEO-friendly names and alt text on the way in, and drop straight into a WooCommerce product gallery.

Choose product→Drop files→Review & name→Upload→Attach to gallery

Written for version 1.5.0 · Plugin menu: Media → Bulk Upload

How it works

The standard WordPress uploader sends every file at once. Drop 30 images on a store with six image sizes and the server tries to run 180 resize jobs at the same time, which is when browsers hang and uploads fail halfway.

Bulk Media Uploader sends one image per request. The server finishes that image, frees the memory, then takes the next. Memory use stays flat however big the batch is, so it works the same on shared hosting, managed hosts like Kinsta and WP Engine, and dedicated servers, with no special configuration.

It doesn’t replace the normal uploader. It adds its own page for larger batches; keep using the standard uploader for one or two images.

Install

Requirements

  • WordPress 6.0 or later, PHP 7.4 or later
  • WooCommerce 7.0 or later for the product search and gallery features. Everything else works without WooCommerce.

Install the plugin

  1. Download the zip from My Account → Downloads on baltic.digital.
  2. In WordPress go to Plugins → Add New → Upload Plugin, choose the zip, click Install Now and then Activate. It appears in your plugin list as BD Bulk Media Importer.
  3. Open Media → Bulk Upload. There’s also a Bulk Upload button at the top of the Media Library.

To install by FTP instead, extract the zip and upload the bd-bulk-media-importer folder to wp-content/plugins/, then activate it under Plugins.

Quick start

  1. Go to Media → Bulk Upload.
  2. Search for the product in Attach to (optional).
  3. Drag your images onto the drop zone, or click it to browse.
  4. Check the filenames and alt text in the review grid, and drag cards to reorder.
  5. Click Start Upload.
  6. When it finishes, click Attach to Product Gallery.

The images are now uploaded, named, given alt text and in the product’s gallery in the order you set.

Step 1: Choose a product and settings

Attach to

Search for the product or post the images belong to. When one is selected:

  • uploaded images are attached to it in the Media Library
  • filenames are built from its URL slug (see Step 3)
  • you can add the images to its product gallery when the upload finishes

On WooCommerce stores, the dropdown next to the search box switches between searching by Title (the default) and SKU. Type at least two characters, click a result to select it, and click × to clear it. You can also leave this empty and upload without attaching the images to anything.

Settings

These three options are remembered in your browser between sessions.

Skip review
Uploads start as soon as you drop the files, without the review step. If a product is selected, the images are attached to its gallery automatically when the upload finishes. Filenames are numbered in drop order rather than named by hand.
Resize to max
Shrinks images in your browser before upload so the longest side is no more than this many pixels. The default is 2048. Smaller images are left alone. See Resize and WebP.
Convert to WebP
Converts JPG and PNG images to WebP in your browser before upload. See Resize and WebP.

Step 2: Add files

Drag files from your computer onto the drop zone, or click the zone to open a file browser. You can drag straight from Finder, File Explorer, or cloud storage apps that support dragging files.

  • Formats: any image type your WordPress site accepts, usually JPG, PNG, GIF, WebP and AVIF.
  • Maximum file size: set by your server’s upload_max_filesize. The limit is shown in the drop zone.
  • Checks: each file is checked for type, size, and whether the same file is already in this batch. Rejected files are listed in the activity log with the reason.

Step 3: Review, name and reorder

Every image appears in a review grid with a preview, so you can fix names and order before anything is uploaded.

Filenames from the product

With a product selected, each image is named from the product’s URL slug plus a suffix:

{product-slug}-{suffix}.{extension}

The suffix defaults to a number. For a product with the slug alfresco-new-york-storage-box:

alfresco-new-york-storage-box-1.jpg
alfresco-new-york-storage-box-2.jpg
alfresco-new-york-storage-box-3.jpg

Type a word in a card’s Suffix box to make the name descriptive. The filename on the card updates as you type:

alfresco-new-york-storage-box-front.jpg
alfresco-new-york-storage-box-side.jpg
alfresco-new-york-storage-box-lifestyle.jpg

Without a product, the original filename is kept but cleaned up: lower case, spaces turned into hyphens, special characters removed. Abbey And Becca.jpg becomes abbey-and-becca.jpg.

Alt text

Alt text is written from the final filename, with hyphens turned into spaces and each word capitalised, so alfresco-new-york-storage-box-front.jpg gets the alt text “Alfresco New York Storage Box Front”. Type in a card’s Alt box to replace it.

Order

Drag a card by its handle (⠿) to move it. The order sets:

  • the order the files upload in
  • the order of the product gallery
  • the featured image, which is the first card

What each card shows

A preview, the Suffix and Alt boxes, the final filename, the file size and the original filename. Cards for files that already exist in your Media Library are marked with a yellow warning (see Duplicate check).

Step 4: Upload

Click Start Upload. The review grid is replaced by a progress view with an overall progress bar, a counter such as “7 of 35 (20%)”, the file currently uploading, and a card for each image showing whether it’s waiting, uploading, done or failed.

Controls

Pause
Stops after the file that’s currently uploading. Nothing is lost.
Resume
Carries on from where you paused.
Retry Failed
Re-queues only the files that failed.
Clear Queue
Removes everything still waiting. Files already uploaded stay in the Media Library.

What happens to each file

  1. It’s resized or converted in your browser, if you turned those options on.
  2. It’s sent to WordPress on its own, using WordPress’s normal upload handling.
  3. WordPress creates its thumbnail sizes. Image optimisation plugins such as Imagify, ShortPixel, Smush and EWWW run at this point, on one image at a time.
  4. The new filename and alt text are saved.
  5. The server frees the memory and the next file starts.

If a file fails with a timeout or server error, it’s retried once automatically before being marked as failed.

WooCommerce product galleries

Find a product by SKU

Switch the search dropdown to SKU and start typing. Typing OAK finds OAK-ALF-001, OAK-NYC-002 and so on, with exact matches first. Results show the SKU next to the title so you can be sure you’ve picked the right product.

Attach to the gallery

When the upload finishes, a bar appears saying how many images are ready to attach and to which product. Click Attach to Product Gallery and the images are added to the product’s gallery in your chosen order. Leave Set first image as featured image ticked to make the first image the main product image, or untick it to keep the current one. A link to edit the product appears so you can check the result.

Forgot to choose a product first? Select one after the upload and the attach bar updates straight away.

Hands-free mode

With Skip review on and a product selected, dropping the files is the only step. They upload, then attach to the gallery on their own.

Duplicate check

When you add files, every filename is checked against your Media Library in a single quick lookup, even for 100 files. The check uses the cleaned-up filename, because that’s how WordPress stores it: dropping Abbey And Becca.jpg checks for abbey-and-becca.jpg.

Matches get a yellow warning on their card. Click Skip this file to leave it out, or leave it in and WordPress will save the new copy with a number on the end, such as abbey-and-becca-1.jpg, so nothing is overwritten.

Resize and WebP

Both happen in your browser before the upload, so they cost your server nothing and make uploads faster.

Resize
If either side of an image is bigger than your maximum, it’s scaled down so the longest side matches, keeping its proportions. JPG and PNG keep their format. Most WooCommerce themes never show images wider than 1200 to 2048px, so there’s no benefit in uploading a 5000px phone photo.
WebP
JPG and PNG images are saved as WebP at 85% quality, usually 25 to 35% smaller with no visible difference. The filename’s extension changes to .webp.

With both on, a 4MB phone photo typically uploads as a WebP of a few hundred KB. The activity log shows the before and after for each file:

abbey-and-becca.jpg: 4.2 MB → 380 KB (resized 2048×1638) (WebP)
Limits

GIFs aren’t processed, because the browser can’t keep their animation. Some browsers can’t process AVIF. Very large images (10,000px and up) can make the browser pause briefly while they’re resized. If your browser can’t export WebP, the original format is uploaded instead.

Activity log

The log at the bottom of the page records everything with a time: files added, settings applied, each successful upload with its attachment ID and alt text, failures with the error, automatic retries, duplicates, and rejected files with the reason. Newest entries are at the top.

Questions

How many images can I upload at once?

There’s no limit in the plugin. Because images go one at a time, 200 images just take longer than 20. You can pause and resume whenever you like.

Does it replace the normal WordPress uploader?

No. The standard uploader is untouched. This adds a separate page under Media → Bulk Upload and a button on the Media Library.

Will it work with my image optimisation plugin?

Yes, and it’s easier on it. Optimisation plugins run when WordPress creates thumbnails, which happens once per image here instead of for 30 images at once.

Can I use it without WooCommerce?

Yes. One-at-a-time uploading, progress, pause and resume, retries, naming, resize and WebP all work on any WordPress site. Product search, SKU search and gallery attachment need WooCommerce.

Does it work on multisite?

It works on individual sites in a network. Network activation and shared media libraries aren’t supported.

Where are the images stored?

In the normal uploads folder (wp-content/uploads/YYYY/MM/), exactly where WordPress would put them.

What happens if I deactivate the plugin?

Nothing changes. Your images stay in the Media Library. The plugin only keeps short-lived working data that expires after an hour.

Troubleshooting

Uploads fail with “Server error (500)”

WordPress is running out of memory while making thumbnails for one image.

  • Turn on Resize to max 2048px so smaller files reach the server.
  • Raise the PHP memory limit in your hosting control panel: 128MB minimum, 256MB recommended.
  • Check how many image sizes your theme and plugins register. Some themes add ten or more.

Uploads fail with “Timeout”

The server’s time limit is too short for thumbnail generation on large images. Turn on Resize to max, and ask your host to raise max_execution_time to at least 60 seconds. Each file is retried once automatically; if the retry fails too, the image is too large for the current server settings.

The progress bar is stuck on “Uploading…”

Open your browser’s developer console (F12) and look for errors. The usual causes are:

  • a JavaScript conflict with another plugin. Deactivate other plugins one at a time to find it.
  • a security plugin such as Wordfence or Sucuri blocking the upload request. Allow the bd_bulk_upload AJAX action.
  • a CDN such as Cloudflare rejecting large uploads. Check its upload size limit.

The duplicate check misses a file I know is there

The check compares cleaned-up filenames. If the existing file was renamed after upload, by hand or by another plugin, the names won’t match.

WebP conversion isn’t happening

Your browser needs to support WebP export. Current Chrome, Edge and Firefox do, and so does Safari 16 or later. Older browsers upload the original format instead.

Images aren’t in the product gallery

Unless Skip review is on, you need to click Attach to Product Gallery after the upload. Check that a product was selected and every image shows as done.

Compatibility

MinimumTested up to
WordPress6.06.9
PHP7.48.3
WooCommerce (optional)7.09.x
  • Hosting: shared hosting, managed WordPress hosts such as Kinsta, WP Engine, Cloudways, Pressable and Flywheel, VPS and dedicated servers, and containerised WordPress.
  • Image optimisation: Imagify, ShortPixel, Smush, EWWW Image Optimizer.
  • SEO: Yoast SEO, Rank Math, All in One SEO.
  • Page builders: Bricks, Elementor, Beaver Builder, Divi.
  • Caching: WP Super Cache, W3 Total Cache, LiteSpeed Cache, Kinsta cache.

Version history

1.5.0
Code quality fixes. Baltic Digital link added to the plugin page footer.
1.4.2
Search products by SKU as well as title, with the SKU shown in results.
1.4.1
Checked against WordPress 6.9. Tighter input checks throughout.
1.4.0
Fixes to product-based naming, suffixes and alt text saving, and filenames with spaces. Clearer numbered steps on screen.
1.3.0
Review and naming step, alt text, drag to reorder, duplicate check, resize, WebP, hands-free mode, remembered settings.
1.2.0
Single product search box and a live-updating attach bar.
1.1.0
More reliable click-to-browse and a redesigned attach section.
1.0.0
First release.

Still stuck?

Contact us with your plugin version, what you were uploading, and any messages from the activity log.

On this page
Need help?

Stuck on something?

Send your plugin version and what you've tried. You'll hear back from the developer who wrote it.

Contact support

Other plugin docs

DocumentationUpdated October 12, 2026

Product Terms Gate

Make customers read and accept your terms before certain products go in the basket. Pick the categories that need it,…

Read the docs →