WP Offload Media Changelog

2.3.2 - 2019-12-09

  • Improvement: Reduced database queries when external object cache available
  • Bug fix: Uncaught Error: Call to undefined function DeliciousBrains\WP_Offload_Media\Gcp\GuzzleHttp\choose_handler()
  • Bug fix: SVG files not automatically offloaded
  • Tested: PHP 7.4

2.3.1 - 2019-11-19

  • Bug fix: Uncaught Error: Cannot use object of type Media_Library_Item as array in wp-includes/media.php:217
  • Bug fix: Image not automatically offloaded if subsizes not expected

2.3 - 2019-11-12

  • Release Summary Blog Post
  • New: Upgrade routine to migrate offload data to custom table
  • New: Support for changed Media Library upload process introduced with WordPress 5.3
  • New: Support for new "-scaled" and "-rotated" images introduced with WordPress 5.3
  • New: Support for customizer changes introduced with WordPress 5.3
  • New: Offload new "original_image" file introduced with WordPress 5.3
  • New: Error notice displayed when background tool stuck and Site Health loopback requests test failing
  • Improvement: Performance boost during both page display and save
  • Improvement: Better detection of offloaded media URLs during page display
  • Improvement: Divi Page Builder integration supports more than just Divi theme, e.g. Extra theme
  • Bug fix: New Media Library upload given same local file name as offloaded and removed file after Remove Files From Server turned off
  • Bug fix: PHP message: PHP Deprecated: strpos(): Non-string needles will be interpreted as strings in the future
  • Bug fix: Deleting a Media Library item from one language removes bucket objects still used by other WPML duplicates
  • Bug fix: Using Remove from Bucket on a Media Library item from one language removes bucket objects still used by other WPML duplicates
  • Bug fix: Bulk offloader fails to offload original Media Library item in WPML duplicate set when Remove Files From Server turned on
  • Bug fix: Enable Media Replace integration does not remove old file name from bucket
  • Bug fix: Enable Media Replace integration does not generate new object version when file replaced without rename
  • Bug fix: Divi Page Builder's Gallery module does not display thumbnails for remote only images during edit

2.2.1 - 2019-07-18

  • Improvement: Remove Files From Server option now warns about media backups when switched on
  • Bug fix: Undefined index in file amazon-s3-and-cloudfront-pro/classes/filters/as3cf-local-to-s3.php at line 286
  • Bug fix: API calls duplicated in settings page
  • Bug fix: API timeout too long

2.2 - 2019-06-11

  • Release Summary Blog Post
  • New: Bulk offload, download, and remove from bucket tools now work in the background
  • New: Pie chart and background tool progress bars now show percentage and related counts when hovered over
  • New: Use IAM Roles without having to update wp-config.php
  • New: Frankfurt (FRA1) region now supported on DigitalOcean Spaces
  • Improvement: Background tools start processing and progress faster, especially on large multisites with thousands of subsites
  • Improvement: WP dashboard performance
  • Bug fix: Bulk offload stops at license media limit even though site doesn't count towards limit
  • Bug fix: Using remove from bucket tool doesn't update license limit when cancelled
  • Bug fix: Uploaded media files with uppercase extensions get second extension added

2.1.1 - 2019-04-29

  • New: Multisite domain mapping via WordPress MU Domain Mapping plugin is now supported
  • Improvement: Local to Provider content filtering performance improvements
  • Improvement: Warning notice shown when changing storage provider and media already offloaded
  • Bug fix: Media title not retaining characters stripped from filename
  • Bug fix: Warning: is_readable(): open_basedir restriction in effect. File(~/.aws/config) is not within the allowed path(s)
  • Bug fix: Fatal error when GCS Key File not accessible
  • Bug fix: Non-image offloads on subsites with 4 digit IDs get duplicate subsite ID in bucket path
  • Bug fix: No srcset added to img tag if filename includes non-ASCII characters
  • Bug fix: Full size image URL saved to img tag src attribute when thumbnail picked if filename includes non-ASCII characters
  • Bug fix: License information in Plugins page looks inconsistent and links not properly separated
  • Bug fix: License related notices in settings page duplicated

2.1 - 2019-03-05

  • Release Summary Blog Post
  • New: Google Cloud Storage is now supported
  • New: Added "Remove Local Files" bulk/row/details Media page actions
  • New: Added "Make Private/Public in Bucket" bulk/row Media page actions
  • Improvement: AWS PHP SDK updated
  • Improvement: Diagnostic Info shows more complete settings information
  • Bug fix: Copy files to new bucket prompt incorrectly shown after changing storage provider
  • Bug fix: PHP Fatal error: Allowed memory size exhausted when using Enable Media Replace
  • Bug fix: Year/Month path prefix incorrectly set in bucket for non-image media files
  • Bug fix: PHP Fatal error: Class 'XMLWriter' not found
  • Bug fix: PHP Fatal error: Uncaught Error: Call to undefined method ...\Aws3\Aws\S3\Exception\S3Exception::search() in .../classes/providers/aws-provider.php:439
  • Bug fix: PHP Warning: filesize(): stat failed for [file-path] in classes/amazon-s3-and-cloudfront.php on line 1309

2.0.2 - 2018-12-19

  • New: Compatibility with Assets Pull addon 1.1.1

2.0.1 - 2018-12-18

  • Improvement: Streamlined UI for setting Storage Provider and Bucket
  • Bug fix: Background images on global Divi library sections not filtering to remote version
  • Bug fix: Divi Frontend Builder does not filter to remote image URLs on load
  • Bug fix: Corrupt _wp_attachment_metadata causes download tool to fail
  • Bug fix: Change Provider link shown during copy between buckets
  • Bug fix: Failing install and download links shown for addons when license expired
  • Bug fix: On/Off switches in settings look reversed
  • Bug fix: Latest upgrade routine runs on fresh install
  • Bug fix: Defined settings still found in database
  • Bug fix: More Info links in Storage Provider settings incorrect
  • Tested: WordPress 5.0


  • Release Summary Blog Post
  • New: DigitalOcean Spaces is now supported
  • New: Plugin name updated from WP Offload S3 to WP Offload Media
  • Improvement: More logical UI layout and better description of each setting


  • Bug fix: Images remotely edited via stream wrapper sometimes set as private on S3


  • Bug fix: Error getting bucket region
  • Bug fix: Fatal error when child theme has missing or broken style.css
  • Bug fix: Child themes with missing or broken style.css break diagnostic info


  • New: Using AWS PHP SDK v3
  • New: Requires PHP 5.5+
  • New: Divi Visual Builder integration added
  • New: `as3cfpro_woo_use_attachment_capability` filter added to change capability required for adding offloaded files to WooCommerce product
  • Improvement: Supported AWS S3 regions updated and names changed to match current AWS nomenclature
  • Bug fix: PHP Warning: Declaration of AS3CF_Stream_Wrapper::register should be compatible with Aws\S3\StreamWrapper::register
  • Bug fix: File size not stored in _wp_attachment_metadata for audio/video files
  • Bug fix: Image srcset uses full size image if metadata size is stored as string
  • Bug fix: PHP Warning: preg_match() expects parameter 2 to be string, array given
  • Bug fix: SQL syntax error when using `attachment_url_to_postid()` with non-ascii file name
  • Bug fix: Remove All Files From Server tool does not use `as3cf_preserve_file_from_local_removal` filter
  • Bug fix: Remove All Files From Server tool does not store total file size info in metadata
  • Bug fix: WooCommerce product files with over 32 characters in name not downloadable
  • Bug fix: Downloading offloaded SVG file results in compressed file
  • Bug fix: Copy to new bucket fails for non-ascii file names
  • Tested: WordPress 4.9.6
  • Tested: Gutenberg 3.0


  • Bug fix: Fatal error: Uncaught Error: Call to undefined method Composer\Autoload\ClassLoader::setClassMapAuthoritative()
  • Bug fix: AWS keys stored in database by Amazon Web Services plugin are not being migrated to new settings record
  • Bug fix: Notice in settings page that Amazon Web Services plugin no longer required is not being shown when Amazon Web Services active


  • Bug fix: Fatal error in stream wrapper setup when AWS Keys not set


  • Release Summary Blog Post
  • New: Amazon Web Services plugin is no longer required to run WP Offload S3
  • New: Added `as3cf_local_domains` filter for when site content is updated through multiple domains
  • Improvement: AWS keys and license now set in new "Settings" tab, "License & Support" tab renamed to "Support"
  • Improvement: Minor tweaks to settings page UI including right aligning tabs and consistent title across Lite and Pro plugins
  • Improvement: cURL version, theme version and parent theme information added to diagnostics
  • Bug fix: Incompatible with plugins that include AWS PHP SDK v3
  • Bug fix: Regenerate Thumbnails v3.0+ does not work with Remove Files From Server option
  • Bug fix: "Warning: count(): Parameter must be an array or an object that implements Countable" error with PHP 7.2
  • Bug fix: Force HTTPS not being applied to non-srcset S3 URLs in pages served over HTTP
  • Bug fix: Content URLs not filtered to S3 URLs if AWS keys not set
  • Bug fix: URL preview can be coerced to display invalid URL
  • Bug fix: Changes to upload made via `as3cf_object_meta` filter are not reflected in amazonS3_info records
  • Bug fix: Settings link not showing in network admin plugins page
  • Bug fix: Media Library Limit checked too often
  • Bug fix: Upload tool processes more items than batch limit allows
  • Bug fix: Upload tool tries to processes items in remaining network blogs after batch timeout reached
  • Bug fix: Edit attachment links missing in upload errors notice on multisites


  • New: Compatibility with new Assets Pull addon
  • New: Compatibility with HTML Widget
  • New: Dismissible admin notice that WP Offload S3 will soon require PHP 5.5+
  • Improvement: Compatibility with WordPress 4.9
  • Improvement: All “Remove from S3” links and buttons now download files missing from server before removing from S3
  • Bug fix: Mass upload/download/delete fails on large multisites
  • Bug fix: Enable Media Replace can overwrite existing S3 file for different item
  • Bug fix: Enable Media Replace still uploads to S3 when "Copy to S3" turned off
  • Bug fix: Incorrect region used when changing bucket by defining it in WPOS3_SETTINGS
  • Bug fix: Upload tool's time displays incorrectly for long jobs in backgrounded browser
  • Bug fix: Media library notices render inside the upload tool
  • Bug fix: Upload tool pie chart shows NaN% when all media deleted
  • Bug fix: Upload tool state changes when percentage below 1%
  • Bug fix: Features disabled when license expires
  • Bug fix: Error logged during attempted upload of WPML generated duplicate items
  • Bug fix: Plugins row notices look ugly when showing connection error
  • Bug fix: Save notices disappear on settings page
  • Bug fix: Improper use of jQuery.attr logged to browser console
  • Bug fix: 502 error logged when upload tool has many errors
  • Bug fix: WooCommerce downloads getting "reduce your request rate" notices from S3
  • Bug fix: "Content Filtering Upgrade" URL in notice incorrect
  • Bug fix: "Remove all files from S3" broken when cancelling a paused batch before it completes
  • Bug fix: "More info" links can be broken across two lines


  • New: Compatibility with WordPress 4.8
  • New: Tool to copy all Media Library files between buckets
  • New: Compatibility addons are no longer required
  • New: Support for WP CLI wp media regenerate
  • Improvement: Intermediate image sizes are now passed through the as3cf_object_meta filter
  • Improvement: Mass upload tool now reports missing intermediate image sizes
  • Improvement: Content filtering cache now uses the external object when available
  • Bug fix: Timeouts on large multisite installs due to excessive database queries on upgrade routines
  • Bug fix: Video files with private ACL not working with WordPress's default media player
  • Bug fix: JavaScript alert sometimes shown when navigating away from settings screen
  • Bug fix: Bucket permissions check not using configured path
  • Bug fix: WordPress image editor sometimes shows a 404 when 'Remove Files From Server' enabled
  • Bug fix: Notice: Undefined index: region


  • Release Summary Blog Post
  • New: Tool to delete all Media Library files from the local server that have already been uploaded to S3
  • New: Compatibility with Advanced Custom Fields
  • New: `use_as3cf_media_actions` capability for controlling which users have access to on-demand Media Library actions
  • New: `as3cf_filter_post_local_to_s3` and `as3cf_filter_post_s3_to_local` filters added for filtering S3 URLs in custom content
  • Improvement: Dismiss individual file errors when using the upload and download tools
  • Improvement: Media Library URL updated when ACL toggled
  • Improvement: Ensure files uploaded using media_handle_sideload have unique filename on S3 when 'Remove Files From Server' enabled
  • Bug fix: Files uploaded to S3 with empty filenames when the filename started with non-latin characters
  • Bug fix: Audio files with private ACL not working with WordPress's default media player
  • Bug fix: S3 API version not passed to S3 client
  • Bug fix: Content added to text widgets via the Customizer not saved
  • Bug fix: Original file not removed locally when cropped via the Customizer and 'Remove Files From Server' enabled
  • Bug fix: Incorrect Media Library URLs saved to the database when WordPress installed in a subdirectory
  • Bug fix: S3 file count incorrect when Media Library items have multiple `amazonS3_info` keys


  • Improvement: Filter custom CSS - S3 URLs will no longer be saved to the database
  • Bug fix: PDF previews have incorrect MIME type
  • Bug fix: Original PDF not removed from S3 on attachment delete when image previews exist


  • New: Tool to download offloaded files then remove them from S3
  • New: Upgrade routine to replace all S3 URLs in post excerpts with local URLs
  • Improvement: Sidebar progress bar was confusing, seemed like something was currently uploading, replaced with pie chart
  • Improvement: Reduced number of database queries on front-end requests
  • Improvement: Allow expires time to be filtered for private content using the as3cf_expires filter
  • Bug fix: Image srcset not correctly applied when filenames contain special characters
  • Bug fix: Mass upload tool would only process the first 100 blogs in a multisite install
  • Bug fix: Multisite installs sometimes counted by the license API multiple times


  • Bug fix: Private URL signing params stripped in some circumstances
  • Improvement: Performance improvements for URL filtering, especially on large sites


  • Improvement: Better content filtering support for third party plugins and themes
  • Bug fix: PHP Warning: Division by zero


  • New: Filter post excerpts - S3 URLs will no longer be saved to the database
  • Bug fix: PHP 5.3 Fatal error: Using $this when not in object context
  • Bug fix: Query string parameters incorrectly encoded for Media Library items


  • New: Filter post content. S3 URLs will no longer be saved to the database
  • New: Upgrade routine to replace all S3 URLs in content with local URLs
  • New: Support for theme custom logos
  • New: Control the ACL for intermediate image sizes using the as3cf_upload_acl_sizes filter
  • Bug fix: File names containing special characters double encoded
  • Bug fix: srcset not working for file names containing special characters
  • Bug fix: Incorrect placeholder text for ‘Path’ option
  • Bug fix: Objects in root of bucket not deleted when removed from the Media Library
  • Bug fix: No longer use deprecated functions in WordPress 4.6
  • Bug fix: Don’t delete local file when ‘Remove Files From Server’ enabled and upload to S3 fails
  • Bug fix: 'Install & Activate Addon' button not working from compatibility notices


  • New: Compatibility with Assets addon 1.2.1


  • New: Compatibility with WordPress 4.6
  • Improvement: No longer delete plugin data on uninstall. Manual removal possible, as per this doc


  • New: Compatibility with WordPress 4.6
  • New: Compatibility with Assets Addon 1.2


  • New: Now using simpler Force HTTPS setting, removed redundant Always Use HTTP setting
  • New: `as3cf_cloudfront_path_parts` filter allows changing served CloudFront path (useful when distribution pulls subdirectory)
  • Improvement: Better compatibility with non-standard notices from other plugins and themes
  • Improvement: Added basic auth and proxy info to diagnostic info
  • Improvement: Added `allow_url_fopen` status to diagnostic info
  • Improvement: Added memory usage to diagnostic info
  • Improvement: Ensure notice text is 800px or less in width
  • Improvement: Reduced database queries on settings screen
  • Improvement: Clicking "enter your license here" in Plugins listing now focuses on the license textbox on Settings tab
  • Improvement: Batch Find & Replace complete messages wait until all queued batches complete
  • Bug fix: Error when _wp_attachment_data metadata contains serialized WP_Error
  • Bug fix: Find & Replace modal still showing when clicking 'No' to the no local file warning
  • Bug fix: "Remove from S3" success notice has incorrect count when using Find & Replace
  • Bug fix: Find & Replace modal not showing when Media Library item's copy/remove S3 row action clicked before page finishes loading


  • New: Compatibility with WordPress 4.5
  • Bug fix: Unable to upload new files to S3 when license expired or limit reached
  • Bug fix: Mass upload tool fails when a large amount of local files are missing


  • Bug fix: Don't replace srcset URLs when Rewrite File URLs option disabled
  • Bug fix: Fatal error: Cannot redeclare as3cf_get_secure_attachment_url()
  • Bug fix: Download tool prompt not displaying on plugin deactivation
  • Bug fix: Unlimited license incorrectly calculating allowed upload limit
  • Bug fix: Uninstall would run for Lite version even if Pro version installed


  • Bug fix: Fatal error on plugin activation


  • Release Summary Blog Post
  • New: "WP Offload S3 - Pro Upgrade" plugin is now "WP Offload S3" and no longer requires the free plugin
  • New: Define any and all settings with a constant in wp-config.php
  • New: Documentation links for each setting
  • New: Tool to detect all files missing from your server, download them from S3, and replace URLs
  • New: License usage now based on number of items offloaded to S3 rather than total attachments
  • New: Addon for ACF Image Crop support
  • New: Toggle S3 file permissions private/public
  • New: Link to attachment page in notice after copy to S3
  • New: Filter to ignore mime types using the uploader tool
  • New: Filter to exclude files from being subject to the "Remove Files From Server" setting
  • Improvement: Simplified domain setting UI
  • Improvement: Far future expiration header set by default
  • Improvement: Newly created bucket now immediately appears in the bucket list
  • Improvement: Cleanup user meta on uninstall
  • Improvement: WP Retina 2x integration removed
  • Improvement: Upload latest attachments first when using the uploader tool
  • Improvement: Only perform find and replace of URLs on certain post types for performance
  • Bug fix: Year/Month folder structure on S3 not created if the ‘Organise my uploads into month and year-based folders’ WordPress setting is disabled
  • Bug fix: Responsive srcset PHP notices
  • Bug fix: Compatibility addon notices displayed to non-admin users
  • Bug fix: Potential PHP fatal error in MySQL version check in diagnostic log
  • Bug fix: Missing image library notices displaying before plugin is setup
  • Bug fix: URL find and replace fails if 'Rewrite File URLs' setting is off
  • Bug fix: Find and replace modal prompt hidden after previous dismissal
  • Bug fix: Uploader tool notice displaying 100% when some attachments left to upload
  • Bug fix: Copy back from S3 fails if the local directory doesn't exist


  • Improvement: Compatibility with WP Offload S3 Assets 1.1


  • Improvement: Improve wording of compatibility notices
  • Bug fix: Background processes not completing due to SSL verification error
  • Bug fix: Empty notices shown in WordPress admin area after dismissing find and replace notice


  • Improvement: Show a warning when third party plugins are detected that require a compatibility addon


  • New: Addon for WPML support
  • New: Addon for Enable Media Replace support
  • New: Addon for Meta Slider support
  • Improvement: Dismissible notices show between page loads until dismissed
  • Improvement: Clear upload errors on 100% success
  • Improvement: Fix Media Library bulk action buttons spacing on certain screen resolutions
  • Bug fix: PHP notice 'Undefined index: blog_id'
  • Bug fix: Mass upload of existing media stuck on 'Initiating upload'
  • Bug fix: Find and replace fails on legacy multisite installs
  • Bug fix: Mass upload notice not shown when upload cancelled or complete


  • Improvement: Dismissed license notices reappear when the license state has changed
  • Improvement: Don't show activation warnings when access keys not defined
  • Improvement: More intelligent license notices
  • Bug fix: NaN% shown on existing media upload modal
  • Bug fix: Multiple instances of the existing media upload modal allowed to proceed
  • Bug fix: Find and replace modal dismissible when performing actions
  • Bug fix: Multiple occurances of loading spinner on support tab when quickly switching tabs
  • Bug fix: Enable Media Replace plugin not replacing S3 URLs within content


  • Initial Release