Repository navigation
Allow WP-CLI wp optimole media rollback_images command to execute when offload_media is set to rollback state #1161
Description
Status (2026-10-11)
Fixed in PR #1173 (bugfix/1161 → development, approved by pirate-bot at 0e438a7d).
- Fix:
wp optimole media rollback_imagesnow runs while a rollback started from the dashboard is in progress, so it can finish a rollback that WP-Cron cannot. It is still refused when Image Storage is off and no rollback was started. The offload limit no longer stops a rollback. - Added for safety: the command and the background transfer never move images at the same time (a database lock). If a background step is moving images at that moment, the command stops with "Another image transfer is running. Wait for it to finish, then run this command again."
- Tests: the real command, run with Image Storage off and a rollback in progress; the lock, held from a second database connection. They fail on
development. - Live check: on a local site that is not connected to Optimole, the command is no longer refused, and it is refused while a second process holds the lock.
- Not proven: a full rollback with the command on a connected site with offloaded images.
Impact: 75 · Confidence: 95 · Complexity: 30
Description
- Problem: When a site administrator initiates an image transfer/rollback from the plugin dashboard ('Transfer back from Optimole'), Optimole sets the plugin storage mode to rollback, which stores the
offload_mediasetting option as disabled. If the administrator or host then attempts to run the command-line rollback tool (wp optimole media rollback_images), the WP-CLI command throws an error:Error: You need to have the offload_media option enabled in order to use this commandand aborts. - Desired behavior: WP-CLI's
wp optimole media rollback_imagescommand should check whether a rollback is currently active or in progress (or allow execution ifoffload_mediais disabled due to an ongoing rollback state), rather than strictly requiringoffload_mediato be enabled. - Acceptance Criteria:
- Running
wp optimole media rollback_imagessucceeds when an image rollback operation has been initiated from the dashboard (whereoffload_mediais disabled or set to rollback mode). - The CLI command only rejects execution if no offloaded images exist or if offload media was never configured/active.
Customer Context
The customer needed to roll back 11,000+ offloaded images. The background WP-Cron process stalled due to server cron restrictions. When support instructed the customer and host to run wp optimole media rollback_images via SSH/terminal, the WP-CLI command failed because selecting 'Transfer back from Optimole' in the plugin dashboard had set offload_media to disabled.
Root Cause Analysis
The customer needed to restore offloaded media back to the local WordPress Media Library. The plugin's UI dashboard action 'Transfer back from Optimole' sets the plugin's offload storage mode to rollback, which sets the offload_media option value to disabled. When background WP-Cron stalled and support instructed the host to run wp optimole media rollback_images via WP-CLI, the CLI command failed because it enforces a strict check requiring offload_media to be enabled before initiating or resuming a rollback. The root cause is a workflow/validation contradiction in the plugin code: initiating a rollback in UI turns off offload_media, but the CLI command requires offload_media to be enabled.
Alternative Suggestions
Relax or adjust the option check in Optml_Media_Offload / WP-CLI rollback command handler so that wp optimole media rollback_images checks whether offloaded images exist or whether storage mode is in rollback state, rather than strictly asserting offload_media == enabled.
Reasoning
The customer experienced a failure running the CLI rollback command wp optimole media rollback_images because selecting 'Transfer back from Optimole' in the WordPress admin dashboard saved the storage mode as rollback, which updated offload_media option to disabled. Consequently, when attempting to run wp optimole media rollback_images via CLI as recommended for reliable or large background operations, WP-CLI halts with Error: You need to have the offload_media option enabled in order to use this command. The CLI rollback command should automatically permit execution when offload_media is in a rollback state or automatically bypass this option check during a rollback operation.
Source: HelpScout #3456031569
Generated by feature-request-triage workflow (ID: feature-request-triage_6ab502db326f90.60727165)
Activity
milicavs commentedon Oct 11, 2026
🧪 QA steps and test sandbox
When Transfer back from Optimole is started in the dashboard but the background transfer stalls (for example on a host where WP-Cron doesn't run), the WP-CLI command
wp optimole media rollback_imagescan't finish it: it refuses to run with "You need to have the offload_media option enabled in order to use this command".Requires: your own Optimole account (API key) with Image Storage, and a terminal on the sandbox for WP-CLI (SSH, from the sandbox's page in SandyWP).
0e438a7On the sandbox:
debug.log, which the public site can't read.Reproduce on Optimole 4.2.16:
wp optimole media move_to_optimole(the dashboard's offload can't run without WP-Cron).wp optimole media rollback_images.Error: You need to have the offload_media option enabled in order to use this command, and the images stay on Optimole.Verify the fix on the same sandbox:
/wp-content/uploads/…. Plugins still shows 4.2.16, since the build has no version bump.Edge cases
rollback_imagesis still refused with the offload_media error.move_to_optimolewhile a transfer back is in progress: still refused.rollback_imagesstill runs (only offloading stops at the limit).-1copy in uploads.Fix: #1173 (open)
pirate-bot commentedon Oct 11, 2026
QA agent — 🟢 Passing checks · WP-CLI completes dashboard-started rollbacks without duplicate restores in the tested scenarios.
With a seeded Optimole account and mocked cloud responses, the candidate resumed dashboard-started rollback and restored all 11,001 lightweight image fixtures. The base build rejected the same stalled-rollback state. Quota checks and competing command/background transfers behaved as expected, with no duplicate files. All six outcomes and the PR’s 17 added tests passed; live-account and distributed-database coverage remain follow-ups.
Worth a human look
Checks (6 passed)
Full report, evidence and session trail