We may earn a referral fee at no additional cost to you when you shop through the links on this page.
WordPress just emailed you “Some plugins have failed to update on your site”, or the Plugins screen is stuck on a red “Update failed” notice. This DevAnswers guide explains where the message comes from and how to fix it for good. Everything works from wp-admin and your host’s file manager, no terminal needed.
Quick Fixes to Try First
Most one-off update failures clear up in a couple of minutes. Run through these before digging into causes.
- Take a fresh backup. Even if you already made one earlier, a current copy of your files and database means nothing below can hurt your site.
- Retry the update, one plugin at a time. Go to Dashboard → Updates, tick a single plugin and update it. Launching the update of numerous plugins at the same time can overload the server and cause a timeout, which is exactly how updates get interrupted.
- Check whether the site is stuck in maintenance mode. If visitors see “Briefly unavailable for scheduled maintenance”, clear the leftover maintenance file before anything else.
- Paid plugin? Check that its license is active before troubleshooting anything technical. An expired license quietly blocks updates.
If the update fails again, the table in the next section points you at the right fix for your exact symptom, and the manual update is the most reliable fallback when one-click updating fails.
Why Plugin Updates Fail
The wording of the error tells you which update path failed. A red “Update failed” notice on the Plugins screen means an update you started by hand did not complete. The email version comes from WordPress’s automatic background updates: when a plugin with auto-updates enabled fails to update in the background, WordPress emails the site admin about it.
Underneath, both paths fail for the same handful of reasons: the PHP process that runs your site cannot write inside wp-content/plugins, the server ran out of time, memory, or disk space partway through, the server could not reach WordPress.org to download the new version, or a premium plugin’s license has lapsed. Find your symptom below and jump straight to its fix.
| Symptom | Likely cause | Fix |
|---|---|---|
| Email: “Some plugins have failed to update” | An automatic background update failed | → Auto-updates |
| “Update failed” on the Plugins screen | Permissions, or a server limit hit mid-update | → Permissions |
| WordPress asks for FTP credentials | PHP cannot write your files directly | → Permissions |
| “Briefly unavailable for scheduled maintenance” | Leftover .maintenance file after an interrupted update | → Maintenance mode |
| “cURL error 28” or timeout messages | Server cannot reach WordPress.org in time | → Dig deeper |
| “Destination directory for file streaming” error | Temp folder missing or unwritable, or disk full | → Dig deeper |
| Paid plugin shows an update but will not install it | Expired or missing license | → Dig deeper |
Update the Plugin Manually
When one-click updating keeps failing, replace the plugin’s files yourself. A manual update replaces the plugin’s files and does not touch the WordPress database, so the plugin’s settings survive the swap (a major update may still run its own one-time database update the first time it loads, which is normal). You need either an SFTP client such as FileZilla or your hosting control panel’s file manager.
- Download the latest version of the plugin as a ZIP file. For free plugins, use the blue Download button on the plugin’s wordpress.org page. For paid plugins, log in to the vendor’s site and download it from your account.
- Unzip the file on your computer. Some unzip tools add an extra parent folder, so open what you extracted and find the folder that directly contains the plugin’s files.
- Connect to your site with SFTP or open the file manager, and go to
wp-content/plugins. - Rename the plugin’s current folder to something like
plugin-name-old. Keep it for now as a fallback. - Upload the new plugin folder into
wp-content/plugins. Check the final path: it must bewp-content/plugins/plugin-name, notwp-content/plugins/plugin-name/plugin-name. The nested version is the most common reason a manually uploaded plugin “disappears” from wp-admin. - Log in to wp-admin, open the Plugins screen and confirm the plugin shows the new version number and is still active.
- Delete the
plugin-name-oldfolder.
Fix File Permissions and Ownership
To update a plugin, WordPress has to write the new files to your server itself. When it detects that the web server user lacks the permissions to modify your files directly, the update fails silently or WordPress prompts you for FTP credentials instead. If you keep seeing that prompt, our guide to WordPress asking for FTP credentials during updates covers that exact symptom. The same write problem also breaks media uploads, which is why it often travels together with the “Unable to create directory wp-content/uploads” error.
For most environments, directories (including wp-content) should be set to 755 and individual files to 644. Most SFTP clients and host file managers let you change these from a right-click Permissions menu. On Windows-based (IIS) hosting these numeric values may not apply; there, ask your host to give the PHP application user write access to wp-content instead. If the permissions already look right, the problem is often ownership, the same mismatch that leaves an uploads folder set to 755 still refusing uploads. On shared hosting ownership is a change only your host can make: open a support ticket and ask them to make sure the files WordPress needs write access to, wp-content and everything inside it, are owned (or group-owned) by the account WordPress runs as.
777 to force an update through, no matter how many forum posts suggest it. With 777, anyone who is a user on the same server can read, write to and execute your files, and a shared host can have thousands of users. Directories take 755, files take 644. You may also run into advice telling you to add define('FS_METHOD', 'direct'); to wp-config.php to make the FTP prompt go away. The official WordPress documentation warns that forcing direct file writes “is fraught with opening up security issues on poorly configured hosts”, so treat it as a last resort and get the ownership fixed properly instead.
Clear Stuck Maintenance Mode
During every update, WordPress switches the site into maintenance mode by creating a hidden file named .maintenance in the root folder of your installation, the same folder that holds wp-config.php. Once the update completes, WordPress deletes the file itself. When an update is interrupted, by a timeout, a closed browser tab, or one failing plugin in a bulk update, the file gets left behind and the whole site, wp-admin included, keeps showing “Briefly unavailable for scheduled maintenance.”
The fix takes a minute: connect with SFTP or open your host’s file manager, go to the folder that contains wp-config.php, and turn on the option to show hidden files (the name starts with a dot, so it is hidden by default). Delete .maintenance, reload your site, and it comes straight back. Then return to Dashboard → Updates and retry the failed update, one plugin at a time.
Stop the Repeated Failure Emails
The emails are a messenger, and the durable fix is curing whatever makes the update fail. But you also control the automatic updates themselves. Auto-updates for plugins are disabled by default; WordPress 5.5 added the controls, so if you never switched them on, a maintenance plugin, your host, or a previous developer probably did. On the Plugins screen, the Automatic Updates column has an “Enable auto-updates” or “Disable auto-updates” link for each plugin, so you can switch off the failing plugin’s auto-updates until you have fixed the cause, then update it manually on your own schedule. The full details are in the official plugins and themes auto-updates documentation.
If it is specifically the inbox noise you want gone, WordPress provides the auto_plugin_update_send_email filter, and returning false to it disables the automatic-update email notifications. Our guide to disabling WordPress auto-update emails walks through three ways to set that up, including one that keeps failure alerts while silencing the success noise.
Still Failing? Dig Deeper
Work through these when the quick fixes, permissions, and a manual update attempt have not cleared it. If you have no error message at all, get one first by turning on WordPress debug logging. Open wp-config.php in your file manager’s editor (download a copy of it first so you can restore it) and find the line that already says define( 'WP_DEBUG', false );. Edit that existing line to say true, and do not add a second WP_DEBUG line: PHP keeps the first definition it finds, so a duplicate added lower down is ignored. Then add the other two lines directly below it, or edit them if they already exist, so the block reads:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Setting WP_DEBUG to true activates debugging, its companion WP_DEBUG_LOG saves all errors to a debug.log file in the wp-content directory, and WP_DEBUG_DISPLAY set to false keeps the errors hidden from your visitors while you work. Retry the failed update, read wp-content/debug.log for the recorded error, and set WP_DEBUG back to false when you are done. Then match the symptom in bold to what you are seeing.
- The log says “Allowed memory size of … bytes exhausted”. The update ran out of PHP memory. Add
define( 'WP_MEMORY_LIMIT', '256M' );towp-config.phpthe same way (or, if aWP_MEMORY_LIMITline already exists, edit its value) to raise the memory WordPress can use. - “cURL error 28: Connection timed out”. A WordPress request that fetches update information from WordPress.org did not finish within its time limit. Common causes include firewall issues, incorrect SSL configuration, plugin conflicts, and outdated software. Check Tools → Site Health in wp-admin, which will confirm whether requests are timing out, then ask your host whether anything is blocking outbound connections.
- “The destination directory for file streaming does not exist or is not writable.” This error is about the temporary folder WordPress downloads the update ZIP into before installing it, and it appears when that folder is missing or blocked on your hosting. Point WordPress at a temporary folder you control: create a new folder named
tempinsidewp-content, then adddefine( 'WP_TEMP_DIR', ABSPATH . 'wp-content/temp' );towp-config.phpthe same way as the debug lines above. Check your hosting plan’s disk usage while you are at it: a full disk produces the same failure. - The update runs for a long time, then fails. PHP scripts run under a time limit (
max_execution_time), and downloading, unzipping and moving a large plugin can exceed it. Update one plugin at a time, and if a single big plugin still times out, ask your host to raise the limit. - A paid plugin never updates. Premium plugins are hosted on the developer’s own site rather than wordpress.org, and they need an active subscription to receive updates. The plugin keeps working when the license lapses, but updates may stop appearing in wp-admin, or an update shows and then refuses to install. Log in to the vendor’s customer portal, renew or confirm the subscription, re-enter the license key on the plugin’s settings page, and if the update still will not run, download the ZIP from your account and update it manually.
Turn on the debug logging from the start of this section before you contact support, and send your host the exact error from debug.log. Server-level limits, ownership, and outbound firewall rules are all things only they can change on shared hosting.
Verify the Update Went Through
Whichever route fixed it, confirm all four of these before moving on:
- The Plugins screen shows the new version number under the plugin’s name.
- The plugin is still active.
- The site front end loads normally, with no maintenance notice.
- The plugin no longer appears under Dashboard → Updates.
Because WordPress only emails you the first time a given version fails, treat the version number on the Plugins screen, not your inbox, as the source of truth. Once it matches the latest release you are done: keep auto-updates on for plugins you trust, fix the underlying cause when a failure email does arrive, and the next update will take care of itself.
Comments