WordPress update failures each have a specific cause behind the generic error message. “Download failed” is a network issue. “Could not copy file” is a permissions issue. Updates getting stuck in maintenance mode means the process was interrupted. Match your error message to the relevant fix below – do not work through all of them in order.
Why WordPress Updates Fail
WordPress updates work by: downloading the update zip from wordpress.org, extracting it to a temporary directory, moving files to replace the old version, and cleaning up. Any step can fail:
- Download fails – server cannot connect to wordpress.org (firewall, DNS issue)
- Extraction fails – insufficient disk space or wrong temp directory permissions
- File move fails – wrong file permissions prevent overwriting existing files
- Stuck in maintenance – the update process was interrupted mid-way
Fix 1: “Download Failed. A Valid URL Was Not Provided”
This error means WordPress cannot connect to wordpress.org to download the update. Causes: your hosting firewall blocks outbound connections, your server’s SSL is not correctly verifying wordpress.org’s certificate, or there is a temporary connectivity issue. Try the update again after a few minutes. If it consistently fails, contact your host and ask them to whitelist outbound connections to api.wordpress.org and downloads.wordpress.org on port 443.
As a workaround, download the plugin or theme directly from wordpress.org to your computer. Go to Plugins -> Add New -> Upload Plugin and upload the downloaded zip manually. This bypasses the server’s outbound connection requirement.
Problem not solved? Describe the issue and get a free estimate.
Fix 2: “Update Failed: Could Not Copy File” or Permission Errors
File permission errors occur when the web server process cannot write to the WordPress directories. This is a server configuration issue. Add this to wp-config.php to tell WordPress how to handle file system operations:
define( 'FS_METHOD', 'direct' );
This tells WordPress to write files directly rather than going through an FTP layer. Only use this if your web server user owns the WordPress files (which it does on most shared and managed hosting). If this causes a permissions error, remove it and contact your host to correct the file ownership.
Fix 3: Updates Get Stuck or WordPress Is Stuck in Maintenance Mode
WordPress creates a .maintenance file when an update starts and deletes it when the update completes. If the update process is interrupted (server timeout, connection drop), the file remains and all subsequent page loads show “Briefly unavailable for scheduled maintenance.” Connect to your server via FTP, navigate to the WordPress root directory, and delete the .maintenance file. The site immediately returns to normal.
The interrupted update may have left WordPress in a partially-updated state. After removing .maintenance, check if the plugin or core version that was updating is intact. If not, manually download and upload the complete fresh version.
Fix 4: “Installation Failed: Could Not Create Directory”
WordPress needs to write to the wp-content/plugins/ or wp-content/themes/ directory during updates. This error means those directories are not writable by the web server. Via FTP or File Manager, right-click the plugins/ or themes/ directory, select Change Permissions, and set it to 755. Also check that the parent wp-content/ directory is 755. Retry the update after fixing permissions.
Fix 5: Update Completes But Plugin Still Shows Old Version
Caching sometimes serves old plugin files after an update. Clear your caching plugin’s cache, clear any CDN cache, and do a hard browser refresh. If the plugin admin still shows the old version, the update file might not have been written correctly. Deactivate and reactivate the plugin to force WordPress to re-read the version from the file system.
Manual Update as Last Resort
For any update that refuses to complete automatically, download the latest version from wordpress.org or the plugin/theme developer’s site. Via FTP, delete the existing plugin folder in wp-content/plugins/ (after deactivating the plugin in wp-admin). Upload the new plugin folder. Reactivate the plugin. This bypasses every automatic update mechanism and works regardless of why the automatic update fails.