Release v2.5.0
WordPress 7.1 Compatibility Release
This release adapts the media modules to WordPress 7.1's new client-side media processing pipeline, where the browser uploads the original via REST, generates sub-sizes locally, and sideloads them through /wp/v2/media/{id}/sideload.
Image Resizing
- Keeps media processing server-side while the module is enabled (via the
wp_client_side_media_processing_enabledfilter). In the client-side flow, a server-side resize of the original either fails core's dimension validation with a 400 error or is silently replaced by the client's own 2560px scaled copy. - As defense in depth, the resizer also refuses to touch files arriving on the sideload endpoint or on a media create with
generate_sub_sizes=false.
File Renaming
- No longer renames files uploaded to the sub-size sideload endpoint. Those names must derive from the attachment's existing (already renamed) file name, otherwise core's naming workaround stops matching and every sub-size lands on a numeric-suffix name.
- The optional date prefix is now idempotent — a name already carrying one is never double-prefixed.
Thumbnail Disabling
- Disabled sizes are now also removed from
wp_get_missing_image_subsizes(), which WordPress 7.1 uses to tell the browser which sub-sizes to generate client-side (and which the post-upload recovery has always used). Previously, disabled built-in sizes could quietly come back through those paths.
Thumbnail Cleanup
- Since WordPress 7.1, one physical file can be registered under several size names when sizes share dimensions. The batch cleanup now tracks which files are still referenced by kept sizes, the main file, and the new companion files (
source_image,animated_video,animated_video_poster), and never deletes a file that a surviving entry still points to.
SEO Cleanup
- The emoji dns-prefetch removal no longer hardcodes the emoji CDN URL (flagged by Plugin Check) and now handles resource hint entries passed as arrays, which previously raised a PHP 8 TypeError. WordPress 7.1 itself no longer prints this hint; the filter remains for older supported versions.
Verification
Verified against WordPress 7.1 in Docker: 16 functional checks, sideload route toggling over real HTTP, and a clean official Plugin Check run on a packaged copy. Tested up to bumped to 7.1.
Full Changelog: v2.4.1...v2.5.0