wp media regenerate
Regenerate all cropped and scaled image sizes for your media library. Essential after changing image size settings, switching themes, or adding new custom image sizes — ensures every existing image has the correct derivative sizes on disk.
What It Does
wp media regenerate reads each attachment from the database, locates the original file on disk, and re-runs WordPress's wp_generate_attachment_metadata() to create all required derivative sizes (thumbnail, medium, large, custom). It replaces outdated or missing size files.
Syntax
wp media regenerate [<attachment-id>...] [OPTIONS]
Options
| Flag | Description |
|---|---|
[ATTACHMENT_ID...] | One or more attachment IDs to regenerate (default: all) |
--image-size=SIZE | Regenerate only a specific image size |
--skip-delete | Skip deleting old thumbnail files before regenerating |
--only-missing | Only regenerate sizes that don't already exist on disk |
--yes | Skip confirmation prompt |
Basic Usage
Regenerate all attachments (with confirmation)
wp media regenerate
Output:
Found 342 images to regenerate.
1/342 Regenerated thumbnails for "hero-banner.jpg" (ID 101).
2/342 Regenerated thumbnails for "product-shot.jpg" (ID 102).
...
342/342 Regenerated thumbnails for "footer-logo.png" (ID 442).
Success: Regenerated 342 of 342 images.
Regenerate all without confirmation prompt
wp media regenerate --yes
Regenerate a single attachment by ID
wp media regenerate 101
Output:
1/1 Regenerating thumbnails for "hero-banner.jpg" (ID 101).
Success: Regenerated 1 of 1 images.
Regenerate only missing sizes (fastest, safest)
wp media regenerate --only-missing --yes
Output:
Found 342 images to regenerate.
Skipping "hero-banner.jpg" (ID 101) — all sizes present.
1/1 Regenerating thumbnails for "new-upload.jpg" (ID 443).
Success: Regenerated 1 of 342 images.
Regenerate only a specific image size
wp media regenerate --image-size=woocommerce_thumbnail --yes
Output:
Found 342 images to regenerate.
1/342 Regenerating thumbnails for "product-shot.jpg" (ID 102).
...
Success: Regenerated 342 of 342 images (woocommerce_thumbnail only).
Real-World Scenarios
Scenario 1: After adding a new custom image size
You added a new size in your theme:
add_image_size('feature-card', 800, 450, true);
Now regenerate all media to create the new crop:
wp media regenerate --image-size=feature-card --yes
Scenario 2: After switching themes
Different themes register different image sizes. After switching, regenerate everything to ensure the new theme's sizes exist:
wp theme activate new-theme
wp media regenerate --yes
Scenario 3: After server migration (missing crops)
After migrating from one server to another, some derivative images may be missing. Regenerate only missing sizes to avoid re-processing every image:
wp media regenerate --only-missing --yes
Scenario 4: Large library — regenerate in batches
For very large libraries (10,000+ images), regenerate in batches to avoid timeouts:
#!/bin/bash
# Regenerate in batches of 100
IDS=$(wp post list --post_type=attachment --format=ids --posts_per_page=100 --offset=0)
wp media regenerate $IDS --yes
IDS=$(wp post list --post_type=attachment --format=ids --posts_per_page=100 --offset=100)
wp media regenerate $IDS --yes
Scenario 5: WooCommerce product image regeneration
After changing WooCommerce image dimensions in Settings > Products > Images:
wp media regenerate --image-size=woocommerce_thumbnail --yes
wp media regenerate --image-size=woocommerce_single --yes
wp media regenerate --image-size=woocommerce_gallery_thumbnail --yes
Important Notes
| Behaviour | Notes |
|---|---|
| Original files are never modified | Only derivative/crop files are affected |
| Old size files are deleted by default | Use --skip-delete to keep them |
| Works with external storage | Compatible with S3/Cloudinary plugins that hook wp_generate_attachment_metadata |
Best Practices
- Use
--only-missingon large libraries — dramatically faster; only processes images that actually need regeneration. - Use
--image-sizewhen you only added/changed one size — skip regenerating sizes that are already correct. - Run during off-peak hours — CPU-intensive on large libraries.
- Take a database backup before running on production.
Troubleshooting
| Problem | Cause | Fix |
|---|---|---|
Warning: No file found for attachment | Original file missing from server | Check wp-content/uploads/ or restore from backup |
| Sizes not generated | PHP memory_limit too low for large images | Increase memory_limit in php.ini or add wp config set WP_MEMORY_LIMIT 512M |
| Command times out | Library too large | Process in batches using attachment IDs |
Quick Reference
wp media regenerate --yes # All images
wp media regenerate <id> # Single image
wp media regenerate --only-missing --yes # Only missing sizes
wp media regenerate --image-size=thumbnail --yes # One size only
Next Steps
wp media import— add new images to the media library.wp media image-size— list registered image sizes.