6 Ways to Fix WordPress Stuck While Updating

The biggest lie in WordPress troubleshooting is that you have to wait it out. When your site shows the dreaded 'Updating...' spinner for minutes on end, most guides tell you to be patient. In reality, five minutes of waiting is already too long; a stuck update is almost always a sign of a specific, fixable conflict, not a slow server. The quickest fix—killing the AJAX request—takes under thirty seconds and often resolves the issue immediately.

This guide covers eight ways to fix WordPress stuck while updating, ordered from the fastest and safest to the most thorough. The most common cause is a plugin conflict that interrupts the AJAX routine WordPress uses to save posts, widgets, and menu items. The fastest fix is hard-refreshing the page and resending the request. If that does not work, the methods below will get your site moving again.

Before you start: back up your site and database. Even a simple manual backup of the wp-content folder and a database export via phpMyAdmin will save you hours if something goes wrong. These fixes involve editing core files or disabling plugins, so a safety net is essential.

Common causes of a stuck update

Why does WordPress get stuck while updating?

WordPress uses AJAX (Asynchronous JavaScript and XML) to save content in the background without refreshing the whole page. When you click 'Update', the browser sends a POST request to admin-ajax.php. If that script errors out or a PHP notice interrupts the response, WordPress never receives the 'success' signal, and the spinner runs forever.

Common culprits include a plugin that echoes arbitrary output before the AJAX response, a theme that queues a conflicting script, or a server-level rule that blocks the request. Knowing this mechanism makes each fix below easier to understand and apply.

Fix 1: Hard refresh and resend the request

This is the first thing to try because it costs nothing and works roughly thirty percent of the time. Press Ctrl + Shift + R (Windows/Linux) or Cmd + Shift + R (Mac) to force a hard refresh that bypasses the browser cache. Then click 'Update' again immediately. If the page saved successfully, the issue was a stale JavaScript file.

If the spinner returns, clear your browser cache manually or test with an incognito window. Android and iOS users can clear site data in the browser settings. This step also rules out a CDN cache serving an old version of admin-ajax.php.

Fix 2: Deactivate all plugins

A plugin conflict is the number one cause of stuck updates. Deactivate every plugin at once by renaming the plugins folder via FTP or your hosting file manager. Navigate to /wp-content/ and rename plugins to pluginsold. This forces WordPress to load with zero active plugins.

Go back to your post or page and try updating. If it works, you have confirmed a plugin is at fault. Rename the folder back to plugins, then reactivate each plugin one by one (updating the page after each activation) until the issue returns. The last active plugin is the culprit—replace or reconfigure it.

Fix 3: Switch to a default theme

Themes can also break the update process, especially if they enqueue custom scripts that block or delay the WordPress admin JavaScript. From the Appearance menu in the dashboard, activate a default theme such as Twenty Twenty-Four or Twenty Twenty-Three. If the update works, your theme's scripts are interfering.

If you cannot access the dashboard because the update spinner is on every admin page, switch themes via FTP. Navigate to /wp-content/themes/ and rename your current theme folder (e.g., yourtheme to yourthemedisabled). WordPress will automatically fall back to a default theme if one is installed. If no default theme exists, upload one manually.

Fix 4: Increase PHP memory limit

WordPress recommends a PHP memory limit of at least 64 MB, but modern sites with several plugins may need 256 MB or more. A low memory limit can cause the AJAX request to time out before the script finishes saving post metadata, terms, and revisions.

Edit wp-config.php and add this line above the / That's all, stop editing! / comment:

define('WPMEMORYLIMIT', '256M');

If your host allows it, you can also increase the limit via php.ini with memorylimit = 256M or via .htaccess with phpvalue memorylimit 256M. After making the change, test the update again.

Fix 5: Disable the WordPress Heartbeat API

The Heartbeat API sends frequent AJAX calls to check for post locks, autosaves, and other session data. On a busy post, these calls can pile up and prevent the update from completing. You can disable or throttle Heartbeat selectively using a plugin or a code snippet.

Install a free plugin like Heartbeat Control or add this code to your theme's functions.php file (or better, a site-specific plugin):

addaction( 'init', 'customdisableheartbeat', 1 );
function custom
disableheartbeat() {
wp
deregisterscript('heartbeat');
}

This completely disables Heartbeat on the front end and admin. For a less aggressive approach, use the Heartbeat Control plugin to limit frequency to 60 seconds only on post-editing screens. After disabling, test the stuck update again.

Fix 6: Check for .htaccess and redirect issues

A corrupted .htaccess file or a misconfigured redirect rule can intercept the AJAX POST request and return an unexpected 301 or 404 response, which WordPress interprets as a failure. Rename .htaccess to .htaccessold in your site root via FTP. Then go to Settings → Permalinks in your dashboard and click 'Save Changes' to generate a fresh .htaccess file.

If you cannot access the dashboard, regenerate .htaccess manually with a default set of WordPress rules. Alternatively, contact your host and ask them to check for modsecurity rules that might be blocking admin-ajax.php. A common rule blocks POST requests containing certain strings, which can interfere with WordPress updates.

Fix 7: Clear server and object caches

Server-level caching (e.g., Varnish, Nginx FastCGI cache) and object caches (Redis, Memcached) can serve a stale version of the admin scripts or cache the AJAX response. If your host uses a caching layer, purge all caches from your hosting control panel. For Redis or Memcached, flush them via WP-CLI or your caching plugin.

Some managed WordPress hosts, like WP Engine or Kinsta, allow you to clear the cache from their dashboard. If you are on a shared host, look for a 'Purge All Cache' button in your caching plugin (e.g., W3 Total Cache, WP Super Cache, LiteSpeed Cache). After purging, test the update in an incognito window.

Fix 8: Debug with WPDEBUG and WPDEBUGLOG

When all else fails, turn on WordPress debugging to catch the exact PHP notice or fatal error that is breaking the AJAX response. Add these lines to wp-config.php:

define('WPDEBUG', true);
define('WP
DEBUGLOG', true);
define('WP
DEBUGDISPLAY', false);

Then attempt the update again. The error will be logged to /wp-content/debug.log. Open that file and look for any PHP notice, warning, or fatal error that occurred at the exact timestamp of your update attempt. Common entries include 'Headers already sent', 'Call to undefined function', or a memory exhaustion error. That line tells you exactly which plugin or theme file is responsible.

Once you identify the cause, you can fix or replace the offending code. When done, remove the debug lines from wp-config.php to avoid exposing error details on a live site.

How to prevent WordPress from getting stuck while updating

Prevention is simpler than recovery. Keep your plugins and themes updated to their latest versions; most compatibility issues are patched within weeks of a WordPress release. Use a staging environment to test updates before applying them to production.

Set a reasonable PHP memory limit (256 MB) and disable any unnecessary Heartbeat calls on the front end. A weekly database optimization via a plugin like WP-Optimize keeps tables lean and reduces query time. If you notice the issue recurring, consider switching to a host that specializes in WordPress and offers server-level caching and object caching out of the box.

Once your site is running smoothly, tools like nativeWP can help you publish SEO-optimized content automatically without touching the editor—removing the update situation entirely for bulk content. Explore nativeWP to see how content automation fits into a stable WordPress workflow.

Frequently asked questions

Why does WordPress keep spinning when I update a post?

The spinner means the AJAX request to admin-ajax.php never received a successful response. This is almost always caused by a plugin conflict, a theme conflict, or a server timeout. Start by hard-refreshing the page, then deactivate all plugins to isolate the source.

Will I lose my content if I refresh while the update is stuck?

No. WordPress saves a revision to the database immediately when you click Update. Refreshing the page or closing the tab does not delete that revision. The content may be in 'auto-draft' status, but you can find it and publish it again after you fix the underlying issue.

Can a CDN cause WordPress to get stuck while updating?

Yes. If your CDN caches the admin JavaScript files, the browser may run an outdated version that has a bug or incompatibility. Purge your CDN cache and perform a hard refresh to ensure the latest scripts load.

Should I increase the PHP execution time limit to fix this?

Increasing maxexecutiontime to 300 seconds can help if the update is timing out because of a heavy post with many terms or images. However, a timeout is rarely the root cause—a plugin conflict is more likely. Increase execution time only after confirming that no plugin conflict exists.

What if none of these fixes work?

If you have tried all eight methods and the issue persists, check your server error logs (usually accessible via cPanel or your host's support portal). Look for 500 internal server errors, memory allocation errors, or modsecurity blocks. Contact your hosting support with the error log entries; they can disable problematic rules or increase limits at the server level.