# Mend — WordPress, mended.
> Mend is a productized WordPress-fix service from Champlin Enterprises. Senior engineers fix broken WordPress sites fast — most fixes the same day — on a backup-first workflow, and every fix ships with a plain-English report of the root cause and what changed. Prices are flat and agreed up front; a free diagnosis gates anything bigger, and a money-back guarantee backs every paid fix. Mend is independent and not affiliated with or endorsed by the WordPress Foundation or Automattic.
## What Mend fixes
WordPress emergencies and bugs: the white screen of death (WSoD), HTTP 500 internal server errors, the "There has been a critical error on this website" message, "error establishing a database connection", hacked sites and malware, being locked out of wp-admin, failed plugin/theme/core updates, plugin conflicts, broken forms and checkouts, and slow sites failing Core Web Vitals.
## Flat-price fixes
- [Quick Fix — $69](https://wpmend.com/start/quick_fix): One specific issue, sorted today.
- [Emergency Rescue — $299](https://wpmend.com/start/emergency): Your site is down. We jump on it now.
- [Speed Pass — $129](https://wpmend.com/start/speed_pass): A faster site, measured before and after.
- [Free Diagnosis — $0](https://wpmend.com/start/diagnosis): tell us what's wrong, we diagnose it (usually within the hour) and quote a flat price before any work. No card.
- [Care Plan — $99/month](https://wpmend.com/care): Keep it mended. Updates, backups, security and uptime monitoring, and one Quick Fix credit every month. The quiet care that stops emergencies before they start.
## Services
- [Emergency WordPress support](https://wpmend.com/emergency-wordpress-support): Mend provides same-day emergency WordPress support: a senior engineer starts within the hour, restores your site to working, then fixes the root cause — for a flat price agreed before we begin. If we can't fix it, you don't pay.
- [WordPress malware removal](https://wpmend.com/wordpress-malware-removal): Mend's WordPress malware removal service cleans the infection, finds and closes every backdoor, patches the entry point that let attackers in, resets your credentials, and requests blocklist review — all documented, for a flat price. Miss one backdoor and the hack comes back; that's why we don't stop at "looks clean."
- [WordPress repair service](https://wpmend.com/fix-my-wordpress-site): Mend is a flat-price WordPress repair service: tell us what's broken, a senior engineer diagnoses it free (usually within the hour), quotes a flat price before any work starts, and fixes it — most repairs the same day, every one with a plain-English writeup.
- [WordPress speed optimization](https://wpmend.com/wordpress-speed-optimization): Mend's WordPress speed optimization is a focused engineering pass — caching, image and database cleanup, render-blocking assets, and Core Web Vitals — delivered with measured before/after numbers for a flat $129. If the numbers don't move, you get your money back.
- [WordPress maintenance service](https://wpmend.com/wordpress-maintenance-service): Mend's WordPress maintenance service (the Care Plan, $99/month) covers managed core, theme and plugin updates, backups, security and uptime monitoring, and one Quick Fix credit every month — run by the same senior engineers who handle our emergency rescues. Cancel anytime.
- [Mend vs Codeable](https://wpmend.com/vs/codeable): an honest comparison with the Codeable marketplace, written by a former Codeable expert — Codeable for custom builds, Mend for same-day flat-price repairs.
## WordPress problem guides
In-depth, plain-English guides to the most common WordPress problems — what causes them, how to fix them yourself, and when to get help:
- [How to Fix the WordPress White Screen of Death](https://wpmend.com/fix/wordpress-white-screen-of-death): The WordPress white screen of death (WSoD) is a blank page with no error message, served when a fatal PHP error stops your site from rendering — most often a broken plugin or theme, an exhausted PHP memory limit, or a corrupted core file.
- [There Has Been a Critical Error on This Website: What It Means and How to Fix It](https://wpmend.com/fix/wordpress-critical-error): "There has been a critical error on this website" is WordPress telling you a PHP fatal error stopped a page from loading, usually from a plugin or theme conflict, exhausted memory, or a corrupt file.
- [How to Fix the WordPress 500 Internal Server Error](https://wpmend.com/fix/wordpress-500-internal-server-error): A 500 internal server error on WordPress is a generic message that means the server hit a problem it couldn't resolve, so it stopped before loading your page.
- [How to Fix the WordPress "Error Establishing a Database Connection" Error](https://wpmend.com/fix/wordpress-database-connection-error): "Error establishing a database connection" means WordPress can't talk to the database where your site's content lives — usually because the login details in wp-config.php are wrong, the database server is down or overloaded, or the database itself is corrupted.
- [WordPress Site Hacked? Here's How to Clean It Up — Safely](https://wpmend.com/fix/wordpress-site-hacked): If your WordPress site is showing spam pages, redirecting visitors elsewhere, or triggering a Google "this site may be hacked" warning, it has almost certainly been compromised — but it's fixable, and you have not lost your site.
- [Locked Out of WordPress Admin: Why It Happens and How to Fix It](https://wpmend.com/fix/locked-out-of-wordpress-admin): If you're locked out of WordPress admin, the cause is almost always one of a few things: a forgotten or reset password, a login redirect loop from incorrect site URL settings, a corrupted .htaccess file, or a security or 2FA plugin misbehaving.
- [WordPress Site Broke After an Update? Here's What Happened and How to Fix It](https://wpmend.com/fix/wordpress-broke-after-update): When a WordPress site breaks right after an update, the cause is almost always a conflict: the plugin, theme, or core version you just updated no longer plays nicely with something else on your site, or it expects a newer (or older) PHP version than your host runs.
- [Speed Up WordPress: Why Your Site Is Slow and How to Fix It](https://wpmend.com/fix/speed-up-wordpress): Most WordPress sites are slow for a handful of predictable reasons: no caching, oversized images, too many heavy plugins, and a host or PHP version that can't keep up.
- [All WordPress fix guides](https://wpmend.com/fix)
## Blog — fresh WordPress help
New plain-English articles on WordPress errors, performance, security and maintenance:
- [Why WordPress Contact Forms Stop Sending Email](https://wpmend.com/blog/wordpress-contact-forms-stop-sending-email)
- [Image Optimization for WordPress That Actually Moves the Needle](https://wpmend.com/blog/image-optimization-wordpress-that-moves-the-needle)
- [Stop WordPress Brute-Force Login Attacks Fast](https://wpmend.com/blog/stop-wordpress-brute-force-login-attacks-fast)
- [Critical Error on WordPress: Fast Fixes That Actually Help](https://wpmend.com/blog/critical-error-wordpress-fast-fixes)
- [WordPress Stuck in Maintenance Mode After an Update](https://wpmend.com/blog/wordpress-stuck-in-maintenance-mode-after-update)
- [WordPress 500 Errors: A Step-by-Step Diagnosis Guide](https://wpmend.com/blog/wordpress-500-error-step-by-step-diagnosis)
- [A Sensible WordPress Backup Strategy You Can Actually Use](https://wpmend.com/blog/sensible-wordpress-backup-strategy-restore-test)
- [WordPress Spam Injection Cleanup: Find Hidden Malware Fast](https://wpmend.com/blog/wordpress-spam-injection-cleanup-hidden-malware)
- [All articles](https://wpmend.com/blog)
## How it works
1. Tell us what's wrong (pick a fix or ask for a free diagnosis). Your account is created and you're signed in instantly — passwordless.
2. A senior engineer confirms the root cause, usually within the hour, and the flat price is agreed before any work.
3. We fix it backup-first, then hand you a documented report: what was wrong, what we changed, and how to prevent a repeat.
## For agencies
Mend offers white-label WordPress emergency + maintenance fixes for agencies and freelancers — handled under your brand. See [/for-agencies](https://wpmend.com/for-agencies).
## Contact
- Phone: (815) 885-5509
- Email: hello@champlinenterprises.com
- A Champlin Enterprises studio (https://champlinenterprises.com).
- Full content for AI ingestion: https://wpmend.com/llms-full.txt
============================================================
# Full WordPress fix guides
============================================================
## How to Fix the WordPress White Screen of Death
(https://wpmend.com/fix/wordpress-white-screen-of-death)
The WordPress white screen of death (WSoD) is a blank page with no error message, served when a fatal PHP error stops your site from rendering — most often a broken plugin or theme, an exhausted PHP memory limit, or a corrupted core file. It looks alarming, but it's almost always recoverable: your content and database are intact, and the fix is usually a matter of isolating the one thing that broke.
### What you're seeing
- A completely blank white page with no error text
- The front end, the wp-admin dashboard, or both fail to load
- An HTTP 500 error, or the page that just hangs and never finishes
- It started right after a plugin/theme update, a new install, or an edit to a code file
- Sometimes only certain pages are blank while others still work
### What causes it
**A plugin conflict or faulty update** — A single plugin throwing a fatal error will take the whole page down, and the most common trigger is a plugin that was just updated or activated. Two plugins that don't get along can do the same thing. This is the first thing to suspect when the screen went white right after an update.
**A broken or incompatible theme** — A corrupted theme file, a bad edit to functions.php, or a theme that isn't compatible with your PHP version can produce a fatal error and a blank screen. Switching temporarily to a default theme like Twenty Twenty-Four quickly tells you whether the theme is the culprit.
**PHP memory limit exhausted** — WordPress, your plugins, and your theme all consume PHP memory, and when they exceed the allotted memory_limit the script is killed mid-render, leaving a blank page. Heavy plugins, large media operations, or a low host default (like 64M) are common reasons. Raising the limit in wp-config.php often resolves it.
**A PHP version mismatch** — If your host upgraded PHP (say from 7.4 to 8.2), older plugins or themes that use deprecated syntax can fatal-error on the new version. The site was fine yesterday and blank today with no changes on your end. The fix is updating the offending code or temporarily reverting the PHP version in your hosting panel.
**A corrupted core file or failed update** — An interrupted WordPress update, a bad file upload, or a damaged .htaccess file can leave core files in a broken state. This is less common but does happen after timeouts or server hiccups during an update. Replacing core files or regenerating .htaccess usually clears it.
**A caching layer serving a stale broken page** — Sometimes the underlying error is already fixed, but a page cache or your browser is still serving the blank version. This makes a resolved problem look like it's still broken. Clearing the cache and hard-refreshing rules this out before you go deeper.
### How to fix it yourself
These steps are ordered from safest to most involved — take a full backup before changing any files, and stop if anything feels out of your depth.
1. **Turn on WP_DEBUG to see the real error** — Edit wp-config.php and set define('WP_DEBUG', true); along with define('WP_DEBUG_LOG', true); to write errors to wp-content/debug.log instead of guessing. The log will usually name the exact file and line that failed, which points straight at the guilty plugin or theme. Set WP_DEBUG_DISPLAY to false so visitors don't see raw errors, and turn debugging back off once you're done.
2. **Check your host's PHP error log** — Your hosting control panel (cPanel, Plesk, or your host's dashboard) almost always has an error log that records the fatal error with a timestamp and file path. This is the single most useful clue and requires no code changes at all. If you can read which plugin or theme is named, you've found the cause.
3. **Deactivate plugins to isolate the conflict** — If you can still reach wp-admin, deactivate all plugins, confirm the site loads, then reactivate them one at a time until it breaks again. If you're locked out, rename the wp-content/plugins folder to plugins-off via SFTP or your host's file manager to disable them all at once. This is safe and reversible — renaming back restores everything exactly as it was.
4. **Switch to a default theme** — If plugins aren't the cause, rename your active theme's folder in wp-content/themes; WordPress will fall back to a default theme like Twenty Twenty-Four. If the site comes back, the problem is in your theme — most often a recent edit to functions.php. Editing theme code directly is riskier, so don't paste in fixes you don't fully understand.
5. **Raise the PHP memory limit** — If the logs point to memory, add define('WP_MEMORY_LIMIT', '256M'); to wp-config.php above the "That's all, stop editing" line. Some hosts cap this at the server level, so if it doesn't take effect you may need to raise it in php.ini or ask your host. This is a safe change, but if the site still blanks, memory wasn't the real problem.
### When to get help
If the logs don't make sense, the site is still blank after isolating plugins and the theme, or you simply can't risk breaking your live site further, that's exactly what we're here for. Our Emergency Rescue takes a full backup first, finds the real root cause from the error logs, fixes it cleanly, and documents exactly what was wrong — usually within hours, with a money-back guarantee. You don't have to keep editing live files on a hunch.
### FAQ
**Q: Will I lose my content or data because of the white screen?**
A: Almost never — the white screen of death is a rendering failure, not data loss. Your posts, pages, and media live in the database and on disk, untouched by a PHP error. Once the underlying error is fixed, everything reappears exactly as it was.
**Q: Why is my wp-admin white but the front end works (or vice versa)?**
A: This usually means the broken code only runs in one context — for example an admin-only plugin feature failing in the dashboard, or a front-end-only theme template erroring on public pages. It's a strong clue about where the fault lives. Enabling WP_DEBUG will confirm exactly which file is responsible.
**Q: I can't log in to wp-admin at all. How do I fix it?**
A: You don't need the dashboard — you can disable the cause directly via SFTP or your host's file manager. Renaming the wp-content/plugins folder turns off all plugins, and renaming your active theme folder forces a default theme, which between them resolves most cases. If you're not comfortable touching files over SFTP, that's a good moment to hand it to us.
**Q: Is it safe to edit wp-config.php myself?**
A: Yes, with care — wp-config.php is just a text file, and adding settings like WP_DEBUG or WP_MEMORY_LIMIT is low-risk as long as you place them above the "That's all, stop editing" line and don't alter the database credentials. Always download a copy first so you can restore the original. If a single typo there makes you nervous, it's safer to let an engineer make the change.
**Q: How fast can Mend fix a white screen of death?**
A: Most white-screen cases are diagnosed and resolved within hours of an Emergency Rescue starting, because the error logs usually point straight to the cause. We back up first, fix the root issue rather than masking it, and send you a plain-English summary of what broke and why. If we can't fix it, you don't pay.
## There Has Been a Critical Error on This Website: What It Means and How to Fix It
(https://wpmend.com/fix/wordpress-critical-error)
"There has been a critical error on this website" is WordPress telling you a PHP fatal error stopped a page from loading, usually from a plugin or theme conflict, exhausted memory, or a corrupt file. Your content and database are almost always fine, the site just can't render right now. WordPress also emails the site admin a recovery link that opens Recovery Mode so you can fix the culprit without taking the whole site down.
### What you're seeing
- Front end, admin (/wp-admin), or both show a plain white page reading "There has been a critical error on this website."
- On newer setups the message adds "Please check your site admin email inbox for instructions" with a link.
- An email from WordPress arrives titled something like "Your Site is Experiencing a Technical Issue" naming the plugin or theme at fault.
- The error often appears right after updating, installing, or editing a plugin, theme, or PHP version.
- The same page works intermittently, or only one section (like checkout or a single template) is broken.
### What causes it
**Plugin or theme conflict** — The most common trigger: a plugin or theme update introduces code that conflicts with another plugin, your theme, or your PHP version. WordPress hits an uncatchable PHP fatal error while loading it and stops. The recovery email usually names the exact extension responsible.
**PHP fatal error in code** — A call to an undefined function, a syntax error in a customization, or code written for an incompatible PHP version throws a fatal error. This is frequent after a host upgrades PHP (say 7.4 to 8.2) and older plugin or theme code can no longer run.
**PHP memory exhaustion** — WordPress ran out of allocated PHP memory mid-request, often "Allowed memory size of X bytes exhausted." Heavy plugins, large imports, or page builders on a low memory limit are the usual cause. Raising the WP_MEMORY_LIMIT or the host's PHP limit typically clears it.
**Corrupt or missing core file** — A WordPress core, plugin, or theme file got corrupted or partially uploaded, often during a failed update or an interrupted transfer. PHP can't parse the broken file and fails fatally. Re-uploading clean copies of WordPress core usually resolves it.
**Failed or interrupted update** — An update that timed out or was cut off can leave a plugin, theme, or core half-installed, with mismatched or missing files. The site then crashes loading the inconsistent code. Completing or rolling back the update restores a consistent state.
**Corrupt .htaccess or wp-config issue** — A malformed .htaccess rule, a bad constant or stray character in wp-config.php, or a database connection set incorrectly there can fault the entire site. Because these load on every request, a single mistake takes everything down. Restoring a clean version fixes it.
### How to fix it yourself
Back up your site first, then work through these from safest to most involved.
1. **Check the WordPress recovery email and Recovery Mode** — Look in the site admin's inbox (the address under Settings, General) for the "Your Site is Experiencing a Technical Issue" email. It usually names the exact plugin or theme that crashed and includes a Recovery Mode link. That link logs you into a special dashboard where the faulty extension is paused, so you can deactivate or update it without the white screen.
2. **Turn on debugging to read the real error** — Edit wp-config.php and set WP_DEBUG to true, plus WP_DEBUG_LOG to true and WP_DEBUG_DISPLAY to false, so errors write quietly to wp-content/debug.log. Reload the broken page, then open that log to see the exact file and line of the fatal error. Set WP_DEBUG back to false when you're done, never leave debug output showing on a live site.
3. **Deactivate plugins to isolate the conflict** — If you can't reach the dashboard, connect via SFTP or your host's file manager and rename wp-content/plugins to plugins-off to deactivate everything at once. If the site returns, rename it back and disable plugins one at a time (rename each plugin's folder) until the culprit reappears. Take a backup before touching files so you can always revert.
4. **Switch to a default theme** — If plugins aren't the cause, the theme may be. Via SFTP, rename your active theme's folder in wp-content/themes so WordPress falls back to a default theme like Twenty Twenty-Four. If the error clears, the problem is in your theme or its latest update, and a child theme or rollback is the next step.
5. **Raise the PHP memory limit** — If the log points to exhausted memory, add define('WP_MEMORY_LIMIT', '256M'); to wp-config.php above the "That's all, stop editing" line. Some hosts also require raising the PHP memory_limit in php.ini or the hosting panel. If the site still crashes after this, the memory use is a symptom of a deeper bug, not the root cause.
### When to get help
If the recovery email doesn't name a culprit, the debug log is unfamiliar, or you're nervous editing wp-config.php and plugin files over SFTP, hand it to us. Our Emergency Rescue ($499) is handled by senior WordPress engineers: we take a full backup before touching anything, find and fix the actual fatal error, and document exactly what was wrong and what we changed. It's backed by our money-back guarantee, so if we can't fix it, you don't pay.
### FAQ
**Q: Will I lose my content or data because of this error?**
A: Almost never. The critical error is a code-loading failure, not data loss, so your posts, pages, images, and database are intact behind the broken page. Once the faulty plugin, theme, or file is fixed, everything reappears exactly as it was.
**Q: I never got the WordPress recovery email. What now?**
A: The email goes to the admin address under Settings, General, which may be old, or it can be blocked by your host's mail setup or caught in spam. When there's no email, the safe path is to turn on debug logging and check wp-content/debug.log, or deactivate plugins and themes over SFTP to isolate the cause. If that's out of your comfort zone, our Emergency Rescue handles it for you.
**Q: What is WordPress Recovery Mode?**
A: Recovery Mode is a built-in safe mode (added in WordPress 5.2 with fatal error protection) that loads your dashboard with the crashing plugin or theme paused. You reach it through the link in the recovery email, then deactivate, update, or replace the broken extension from a working admin screen. It's the cleanest way to fix the error without your whole site being down.
**Q: The error started right after a PHP update from my host. Why?**
A: Newer PHP versions remove old functions and tighten syntax, so plugin or theme code written for an older version can suddenly throw a fatal error. The fix is to update the outdated extension to a compatible version, or replace it, rather than just reverting PHP and leaving the site stuck on an old, insecure runtime. We sort out which code is incompatible and update it safely.
**Q: How fast can Mend fix the critical error?**
A: Most critical errors are diagnosed and resolved the same day once we're in. Emergency Rescue ($499) starts with a full backup, then a senior engineer traces the fatal error to its source and fixes it, not just hides it. You get a clear write-up of the cause and the fix, all under our money-back guarantee.
## How to Fix the WordPress 500 Internal Server Error
(https://wpmend.com/fix/wordpress-500-internal-server-error)
A 500 internal server error on WordPress is a generic message that means the server hit a problem it couldn't resolve, so it stopped before loading your page. The cause is almost always one of a handful of known issues: a corrupt .htaccess file, an exhausted PHP memory limit, or a plugin, theme, or core file that's misbehaving. Your content and database are almost certainly fine and recoverable, so don't panic. The error is hiding the real reason, and once you surface it, the fix is usually straightforward.
### What you're seeing
- A blank white page or a plain "500 Internal Server Error" / "HTTP ERROR 500" message with no WordPress styling.
- The wp-admin dashboard is also down, not just the front end, so you can't log in to investigate.
- The error appears on every page, or only after you installed/updated a plugin, theme, or WordPress core.
- The site loads intermittently, or only some pages fail (often a sign of a memory or timeout limit).
- Other apps on the same server still work, which points the problem at this WordPress install specifically.
### What causes it
**Corrupt or misconfigured .htaccess** — The .htaccess file controls how the server handles URLs and rewrites, and a single bad line will throw a 500 on every page. This often happens after a plugin edits it, a permalink change, or a botched migration. It's the most common cause and, fortunately, one of the safest to fix.
**Exhausted PHP memory limit** — WordPress, your theme, and plugins each consume memory, and when they exceed the limit your host allows, the page dies with a 500. Page builders, backup plugins, and image-heavy operations are frequent triggers. Raising the limit, or finding the plugin that's eating it, resolves this.
**A plugin or theme conflict** — A poorly coded, outdated, or incompatible plugin or theme can crash the PHP process, especially right after an update. Two plugins trying to do the same thing can also collide. Because the error takes down wp-admin too, you often have to disable the culprit over FTP rather than from the dashboard.
**A corrupt WordPress core file** — If a core file was damaged during an interrupted update, a failed transfer, or disk issues, WordPress can fail to boot and return a 500. This is less common but very fixable by replacing the core files with clean copies, which leaves your content and database untouched.
**Server configuration or resource limits** — The wrong PHP version, a low max_execution_time, file permission problems, or a server hitting its CPU/process limits can all surface as a 500. These live above WordPress, in the hosting environment. Your host's error log is usually the fastest way to confirm a server-side cause.
**A broken or incomplete update** — An update to WordPress, a plugin, or a theme that was interrupted partway through can leave files in an inconsistent state. The site was fine an hour ago and is now throwing a 500 right after you clicked "update." Rolling the component back, or completing the update cleanly, fixes it.
### How to fix it yourself
These steps are safe for non-experts in order, but always take a full backup of your files and database first so you can undo anything.
1. **Back up before you touch anything** — Download a copy of your site files (via FTP or your host's file manager) and export your database before making changes. This is your safety net, so if a step makes things worse, you can restore in minutes. Never skip this, even though the temptation under pressure is real.
2. **Regenerate the .htaccess file** — Using FTP or your host's file manager, rename .htaccess in your site's root to .htaccess_old, then reload the site. If it comes back, the file was the problem; log in to wp-admin and go to Settings > Permalinks and click Save to generate a fresh, clean one. Don't delete the old file until you've confirmed the fix.
3. **Raise the PHP memory limit** — Edit wp-config.php and add the line define('WP_MEMORY_LIMIT', '256M'); just above the "That's all, stop editing" comment. If the 500 clears, memory was the constraint. If your host caps memory below this, the value won't take and you'll need to ask them or move on to the next step.
4. **Deactivate plugins without the dashboard** — Because wp-admin is often down too, use FTP to rename the wp-content/plugins folder to plugins_old, which deactivates every plugin at once. If the site loads, rename it back, then disable plugins one at a time (rename each subfolder) to find the culprit. Reactivate the rest once you've identified it.
5. **Read the server error log** — Turn on debugging by setting define('WP_DEBUG', true); and define('WP_DEBUG_LOG', true); in wp-config.php, then reproduce the error and open wp-content/debug.log, or check your host's error_log. The exact file and line number named there is the real cause behind the generic 500. Turn WP_DEBUG back off when you're done so errors aren't shown to visitors.
### When to get help
If you've worked the safe steps and the 500 is still there, or wp-admin and FTP feel out of your depth, that's a sensible point to hand it to us. Mend's senior engineers take a full backup first, find the actual cause in your server logs rather than guessing, fix it, and document exactly what was wrong and what we changed. Our Emergency Rescue is a flat $499 and backed by a money-back guarantee, so getting your site back online carries no risk.
### FAQ
**Q: Will I lose my content or data fixing a 500 error?**
A: Almost never. A 500 error is about code or server execution, not your database, so your posts, pages, and settings are sitting safely untouched. As long as you back up before making changes, the fix is fully reversible.
**Q: Why can't I log in to wp-admin during a 500 error?**
A: The same problem that crashes your front end usually crashes the admin area, because both run through the same WordPress core and plugins. That's why many fixes are done over FTP or your host's file manager instead of the dashboard. Once the underlying cause is resolved, wp-admin comes back with it.
**Q: How do I find the real cause behind the generic 500 message?**
A: The 500 page is intentionally vague, but your server's error log isn't. Enable WP_DEBUG in wp-config.php or open your host's error_log, and you'll see the exact file and line that failed. That single line turns guesswork into a targeted fix.
**Q: Is it safe to edit wp-config.php or .htaccess myself?**
A: Yes, as long as you back up the original file first and change only the lines described. Both are plain text files, and renaming or restoring a backup undoes any mistake. If editing core configuration files makes you uneasy, that's a fair reason to let an engineer handle it.
**Q: How fast can Mend fix a 500 error on my site?**
A: Most 500 errors are diagnosed and fixed in well under an hour once we're in, because the causes are well understood and we go straight to the logs. Our Emergency Rescue is $499, backup-first, fully documented, and money-back guaranteed. You get your site back and a clear record of what went wrong.
## How to Fix the WordPress "Error Establishing a Database Connection" Error
(https://wpmend.com/fix/wordpress-database-connection-error)
"Error establishing a database connection" means WordPress can't talk to the database where your site's content lives — usually because the login details in wp-config.php are wrong, the database server is down or overloaded, or the database itself is corrupted. Your content is almost always still there; the connection between WordPress and the database is the part that broke. It's one of the most common WordPress errors, and in most cases it's fully recoverable.
### What you're seeing
- The entire site (and often /wp-admin too) shows only the white page text "Error establishing a database connection."
- The message appears suddenly with no plugin or theme change on your end — often right after a host migration, update, or traffic spike.
- Sometimes the front end loads but the admin shows a slightly different message like "One or more database tables are unavailable. The database may need to be repaired."
- Refreshing brings the error back intermittently, which usually points to an overloaded or rate-limited database server.
- Other sites on the same hosting account may be down at the same time.
### What causes it
**Wrong database credentials in wp-config.php** — WordPress reads the database name, user, password, and host from wp-config.php to log in to the database. If any of these changed — after a host migration, a password reset, or a manual edit — the login fails and you get this error. This is the single most common cause.
**The database server is down or unreachable** — Your database often runs as a separate service (sometimes on a different host than your files). If that MySQL/MariaDB service has crashed, been restarted, or the host value points to the wrong address, WordPress has nothing to connect to. This is common on shared hosting during maintenance or outages.
**Exceeded database connection limits** — Most hosts cap how many simultaneous database connections an account can open. A traffic spike, a runaway plugin, or a poorly optimized query can max out that limit, so new requests are refused. The error then comes and goes depending on load, which is the tell-tale sign of this cause.
**Corrupted database tables** — An interrupted update, a server crash, or a disk problem can leave one or more database tables corrupted. WordPress may connect but fail to read the tables it needs, often showing the "database may need to be repaired" variant. WordPress has a built-in repair tool for exactly this situation.
**Server resource exhaustion** — If the server runs out of memory or disk space, the database process can be killed or refuse new connections. This is common on undersized hosting plans and after a sudden surge of traffic or a backup process filling the disk. Restarting the database or freeing resources usually restores service.
**A hacked or compromised site** — Malware or an attacker can alter wp-config.php, change database logins, or hammer the database until it falls over. If the settings look correct but were changed without your knowledge, treat the site as compromised. In that case, fixing the connection is only step one — the security cleanup matters more.
### How to fix it yourself
These steps are safe to try yourself, but back up your database before any repair so a bad situation can't get worse.
1. **Back up your database first** — Before touching anything, export a copy of the database via your host's phpMyAdmin or a backup tool, and download a copy of wp-config.php. If you can't reach phpMyAdmin because the database is down, at least save wp-config.php. This gives you a safe restore point if a fix goes wrong.
2. **Verify the settings in wp-config.php** — Open wp-config.php and confirm the database name, user, password, and host exactly match what your host shows for the database. Watch for a changed password or a host value that isn't "localhost" on your host. Correcting a single wrong value here resolves a large share of these errors.
3. **Check whether the database server is up** — Log in to your hosting control panel and try to open phpMyAdmin or the database manager. If it won't load or the database service is stopped, the problem is the server, not your site — restart the database if your panel allows it, or open a ticket with your host. If other sites on the account are also down, this is almost certainly the cause.
4. **Repair the database with WP_ALLOW_REPAIR** — If you see the "database may need to be repaired" message, add the line define('WP_ALLOW_REPAIR', true); to wp-config.php, then visit yoursite.com/wp-admin/maint/repair.php and run the repair. Remove that line from wp-config.php immediately afterward, because leaving it in is a security risk. Always have the backup from step one before running this.
5. **Rule out overload and contact your host** — If the error is intermittent, it's likely a connection limit or resource ceiling, which you usually can't fix from WordPress alone. Give your host the exact error text and ask them to check the database service, your connection limit, and server resource usage. They can see logs and restart services that you can't.
### When to get help
If your settings look right and the site is still down, the error keeps returning, or you suspect a hack, stop guessing and let a senior engineer take it. Mend's Emergency Rescue ($499) starts with a full backup, diagnoses the real cause, fixes it, and documents exactly what was wrong and what we changed. It's backed by a money-back guarantee — if we can't fix it, you don't pay.
### FAQ
**Q: Did I lose my content?**
A: Almost certainly not. This error is about the connection to your database, not the data inside it, so your posts, pages, and settings are usually intact and waiting. Once the connection is restored, your content reappears as it was.
**Q: Why did this happen suddenly when I didn't change anything?**
A: Most sudden cases trace back to something on the server side — a host migration, a database restart, a traffic spike hitting connection limits, or a maintenance window. You didn't have to do anything for the settings or the database service to change underneath you. That's why checking with your host is often part of the fix.
**Q: Is it safe to edit wp-config.php myself?**
A: Yes, as long as you download a copy first so you can restore it if something goes wrong. wp-config.php is a plain text file, and correcting the database settings is a common, recoverable edit. Just change only the values you're certain about and keep your backup handy.
**Q: What does WP_ALLOW_REPAIR do, and is it safe?**
A: It temporarily unlocks WordPress's built-in database repair tool at /wp-admin/maint/repair.php, which can fix corrupted tables. It's safe when used briefly with a backup in hand, but you must remove the line from wp-config.php right after, since leaving it active exposes the repair page to anyone. Always export your database before running a repair.
**Q: How fast can Mend fix this?**
A: Emergency Rescue ($499) is built for exactly this — a senior WordPress engineer takes the case quickly, backs up the site first, and works the real cause rather than guessing. Most database-connection failures are resolved the same day, and you get a clear write-up of what broke and how we fixed it. If we can't fix it, the money-back guarantee means you don't pay.
## WordPress Site Hacked? Here's How to Clean It Up — Safely
(https://wpmend.com/fix/wordpress-site-hacked)
If your WordPress site is showing spam pages, redirecting visitors elsewhere, or triggering a Google "this site may be hacked" warning, it has almost certainly been compromised — but it's fixable, and you have not lost your site. The right move is to stay calm, take a backup before you touch anything, change your passwords, and then identify and remove the malware while patching the entry point that let it in. Rushing the cleanup or deleting files blindly is what turns a bad day into a worse one.
### What you're seeing
- Unexpected redirects sending visitors to spam, pharma, or sketchy third-party sites — often only on mobile or only from Google
- Spammy pages, posts, or links you didn't create (pharma, replica goods, gambling), or junk text injected into your existing pages
- New admin users you don't recognize, or suspicious scheduled posts and cron jobs you never set up
- A Google Search Console security alert, a "this site may be hacked" SERP label, or a browser/host blocklist warning
- Modified core, theme, or plugin files, a defaced homepage, or your host suspending the account for malware
### What causes it
**An outdated plugin or theme** — The most common entry point by far is a plugin or theme left un-updated past a known security patch. Attackers scan the web for sites running vulnerable versions and exploit them automatically. The longer an update sits unapplied, the wider the window.
**A vulnerable plugin (even when fully updated)** — Sometimes the plugin itself has a flaw the developer hasn't fixed yet, or one that was abandoned entirely. A single insecure plugin can give an attacker a foothold to upload files or create admin accounts. Nulled or pirated premium plugins are an especially frequent culprit — many ship with backdoors built in.
**Weak or reused passwords** — Brute-force and credential-stuffing attacks target wp-admin, hosting, and FTP logins constantly. A weak admin password, or one reused from a service that was breached elsewhere, hands over the keys directly. Logins without two-factor authentication are the easiest targets.
**Shared-host cross-contamination** — On shared hosting, multiple sites can live under the same account or server space. If a neighbouring site is compromised, malware can spread across the directory into yours — even if your WordPress was perfectly maintained. This is why a clean reinstall sometimes gets reinfected within hours.
**An out-of-date WordPress core or server stack** — Running an old WordPress version, or an outdated PHP version your host no longer patches, leaves known holes open. Core is usually well-maintained via auto-updates, but sites with auto-updates disabled drift out of support. The underlying server software matters as much as WordPress itself.
**A leftover backdoor from a previous hack** — If a site was compromised before and only partially cleaned, attackers almost always leave a hidden backdoor file to re-enter later. Removing the visible symptoms without finding that backdoor leads straight to reinfection. This is the single biggest reason DIY cleanups fail.
### How to fix it yourself
If you want to attempt the first steps yourself, here's how to do it safely and without making things harder to fix later.
1. **Take a full backup before touching anything** — Back up your entire site — files and database — even though it contains the malware. This preserves evidence of how the attacker got in and gives you a restore point if a cleanup step goes wrong. Download it locally; don't rely only on a backup that lives on the same compromised server.
2. **Change every password and reset your salts** — Reset your WordPress admin, hosting, database, and FTP/SFTP passwords to strong, unique ones, and remove any admin users you don't recognize. Then rotate your WordPress security keys (salts) in wp-config.php to force every existing session to log out, which kicks out an attacker who is currently signed in. Enable two-factor authentication on wp-admin while you're there.
3. **Update WordPress core, themes, and plugins** — Bring core, all themes, and all plugins up to their latest versions, since an outdated component is the most likely entry point. Delete any plugins or themes you aren't actively using, especially nulled ones. Don't reactivate anything until you're confident the entry point is closed.
4. **Scan and inspect for malware** — Run a reputable security scanner to flag injected code, unknown files, and modified core files. Compare your wp-admin and wp-includes directories against a fresh copy of the same WordPress version to spot anything that doesn't belong. Look closely for recently modified PHP files and obfuscated code, which often signal a backdoor.
5. **Request a blocklist review once it's clean** — After you're confident the site is genuinely clean and the hole is patched, request a review in Google Search Console to clear any "this site may be hacked" warning. Ask your host to lift any malware suspension as well. Submitting for review before the site is truly clean only resets the clock and can prolong the penalty.
### When to get help
Thorough malware removal is genuinely hard and risky to do yourself — one missed backdoor file and the spam or redirects come right back, often within a day. Mend's Emergency Rescue ($499) puts senior engineers on your site fast: we back up first, find and remove every piece of malware, patch the entry point that let it in, reset your credentials and salts, and request the blocklist review for you. Every step is documented so you can see exactly what we did, and it's backed by our money-back guarantee — if we can't fix it, you don't pay.
### FAQ
**Q: How do I know for sure my WordPress site is hacked?**
A: Clear signs are unexpected redirects, spam pages or links you didn't create, unfamiliar admin users, a Google "this site may be hacked" warning, or your host flagging malware. If you see any of these, treat the site as compromised. A security scan will confirm it and show you what was injected.
**Q: Can I just restore a backup to fix a hacked site?**
A: Restoring a clean, pre-hack backup can remove the malware, but only if you also patch the vulnerability that let the attacker in first. If you restore without closing the entry point — an outdated plugin, a weak password, a leftover backdoor — the site usually gets reinfected. A backup is part of the fix, not the whole fix.
**Q: Why does my site keep getting hacked again after I clean it?**
A: Reinfection almost always means the original entry point is still open or a hidden backdoor file was missed during cleanup. Attackers plant these specifically so they can return after a surface-level fix. Lasting removal requires finding and closing the root cause, not just deleting the visible spam.
**Q: Will a hacked site hurt my Google rankings?**
A: Yes — Google may flag your site with a security warning, suppress it in results, or drop affected pages, and visitors who hit a warning bounce immediately. The faster the site is cleaned and submitted for review, the faster rankings and traffic recover. Leaving it unresolved deepens the damage over time.
**Q: How fast can Mend remove the malware?**
A: Emergency Rescue is built for speed — senior engineers start on your site quickly rather than leaving you in a ticket queue. Most hacked-site cleanups are completed within hours of getting access, depending on how deeply the malware spread. We back up first, fix it, document everything, and stand behind it with a money-back guarantee.
## Locked Out of WordPress Admin: Why It Happens and How to Fix It
(https://wpmend.com/fix/locked-out-of-wordpress-admin)
If you're locked out of WordPress admin, the cause is almost always one of a few things: a forgotten or reset password, a login redirect loop from incorrect site URL settings, a corrupted .htaccess file, or a security or 2FA plugin misbehaving. Your site and content are still intact behind the login screen, so this is recoverable. Below are the real causes and the safe ways to get back in.
### What you're seeing
- wp-admin keeps redirecting you back to the login page after you enter the correct credentials
- You see "Error: The password you entered is incorrect" even though the password is right
- A 2FA or security plugin asks for a code you no longer have, or blocks your IP entirely
- The login page loads but submitting it reloads the same page with no error (a login loop)
- You get "You do not have sufficient permissions" or are told your account isn't an administrator
### What causes it
**Forgotten or changed password** — The simplest cause: the password no longer matches, often after a password manager update or a teammate's change. WordPress's own reset link fixes this when your site can send email. The complication is that many WordPress sites can't reliably send mail, so the reset email never arrives.
**Login redirect loop from wrong Site URL settings** — If the WordPress Address (siteurl) or Site Address (home) values are wrong, often after an HTTPS, domain, or migration change, wp-admin will bounce you straight back to the login screen. You enter correct credentials and just land on login again. This is one of the most common 'I can't log in' loops and it's fixed by correcting those two values.
**Corrupted or misconfigured .htaccess** — A broken .htaccess file, from a bad plugin write, a security rule, or a failed edit, can block access to wp-admin or trigger redirect errors. The login form may not load at all, or it loops. Regenerating a clean .htaccess usually restores access.
**A security or 2FA plugin gone wrong** — Plugins like Wordfence, iThemes/Solid Security, or a two-factor plugin can lock you out by blocking your IP, demanding a 2FA code you've lost, or limiting login attempts. If you can't satisfy the prompt, the plugin itself is now the barrier. It has to be disabled from outside the dashboard to get back in.
**Role or capability problem** — Sometimes you can log in but your account is no longer an administrator, so the admin menu is gone or you see 'insufficient permissions.' This happens after a botched user edit, a role-changing plugin, or a partial restore. Your user role has to be reset to administrator at the database level.
**Hacked and locked out** — If an attacker changed your password or deleted your admin account, you'll be locked out with no warning. This is more serious than the others because the site is also compromised, not just the login. Getting back in is step one; cleaning the hack and closing the entry point is the real job.
### How to fix it yourself
Try these from least to most risky, and back up your site before any database or file change.
1. **Use the password reset link first** — On the login page, click 'Lost your password?' and enter your username or email. If a reset email arrives, you're back in within a minute. If it never shows up, your site likely can't send mail, so move on to the next steps.
2. **Clear cookies and try a clean browser** — A stale login cookie or aggressive cache can cause a login loop that looks like a real lockout. Clear cookies for your domain, or open the login page in a private/incognito window. This costs nothing and rules out the easiest cause before you touch files.
3. **Deactivate plugins via FTP or your host's file manager** — If a security or 2FA plugin is blocking you, connect via FTP/SFTP and rename the folder wp-content/plugins/ to plugins-off (or rename just the suspect plugin's folder). That deactivates them so you can log in, then you rename it back and re-enable plugins one at a time. This is safe to undo but touches live files, so back up first.
4. **Reset your password or role in the database (riskier)** — Using phpMyAdmin or WP-CLI, you can set a new password (wp_users) or restore your administrator role (wp_usermeta). This works when email is broken, but a wrong edit here can break your site, so export a database backup before you start. If you're not comfortable editing SQL directly, stop here and get help.
5. **Fix the Site URL or regenerate .htaccess (riskier)** — For a redirect loop, correct siteurl and home in the wp_options table (or define WP_HOME / WP_SITEURL in wp-config.php), and rename a suspect .htaccess so WordPress writes a clean one. These are powerful fixes but easy to get wrong, so back up the database and the .htaccess file first.
### When to get help
If the reset email never arrives, the database steps make you nervous, or you suspect the site was hacked, that's the right time to hand it off. Mend gets you back into wp-admin fast, and we work backup-first, so a full backup is taken before we touch anything. Every fix is documented so you know exactly what was changed, and it's covered by our money-back guarantee.
### FAQ
**Q: Why does WordPress keep redirecting me back to the login page?**
A: A login redirect loop is almost always caused by incorrect Site URL settings (siteurl/home), a stale login cookie, or a corrupted .htaccess file. Try clearing cookies and using an incognito window first. If that doesn't work, the Site URL values usually need correcting in the database or wp-config.php.
**Q: It says my password is incorrect but I know it's right. What's going on?**
A: This usually isn't really about the password. A caching plugin or stale cookie, a wrong Site URL setting, or a security plugin silently blocking the login can all produce a 'wrong password' or loop. Resetting the password via the database confirms it, but if a fresh reset still fails, the cause is elsewhere.
**Q: The password reset email never arrives. How do I get back in?**
A: Many WordPress sites can't reliably send email, so the reset link never reaches you. In that case you reset the password directly in the database with phpMyAdmin or WP-CLI, or via FTP. Back up first, because a wrong database edit can take the site down.
**Q: I lost my 2FA device or codes. Can I still get into wp-admin?**
A: Yes. Connect via FTP/SFTP and rename the two-factor plugin's folder in wp-content/plugins/ to disable it, which removes the 2FA prompt so you can log in. Then re-enable it and set up two-factor again with a device you control. If you're not comfortable doing this on a live site, we can handle it for you.
**Q: Could being locked out mean my site was hacked?**
A: It can. If your admin password changed on its own or your account vanished, treat it as a possible compromise. Getting back in is only the first step; the site then needs to be scanned and cleaned and the entry point closed, which is exactly the kind of job we handle backup-first and fully documented.
## WordPress Site Broke After an Update? Here's What Happened and How to Fix It
(https://wpmend.com/fix/wordpress-broke-after-update)
When a WordPress site breaks right after an update, the cause is almost always a conflict: the plugin, theme, or core version you just updated no longer plays nicely with something else on your site, or it expects a newer (or older) PHP version than your host runs. The fix is to identify which update broke it and roll that one piece back, then resolve the underlying incompatibility so it stays fixed. Take a breath, don't touch anything else yet, and don't panic-update more plugins to try to fix it, because that usually makes the conflict harder to trace.
### What you're seeing
- A white or blank screen, or a "There has been a critical error on this website" message, appearing right after an update finished
- A specific feature stopped working, such as a contact form, slider, checkout, or booking widget
- The layout is broken, misaligned, or unstyled, while the content itself is still there
- You can reach the front end but the wp-admin dashboard errors out, or vice versa
- Everyone else sees the broken version but you see the old one, or the reverse (a caching mismatch)
### What causes it
**A plugin conflicts with another plugin or your theme** — The updated plugin changed how it loads scripts, hooks, or data, and another plugin or your theme expected the old behavior. Two plugins fighting over the same resource is the single most common cause of a post-update break. The site was fine until the new version shifted that timing.
**The update needs a newer (or different) PHP version than your host runs** — Modern plugin and core releases often require a recent PHP version, and code that worked on an older one can throw a fatal error after the update. The reverse also happens: an update uses syntax your host's older PHP can't parse. The version mismatch, not the plugin itself, is the real fault.
**Deprecated code or a removed function** — An update may remove or deprecate a function that your theme or another plugin still calls. When that call fails, you get a fatal error or a broken feature. This is common with older custom themes and plugins that haven't been maintained alongside WordPress core.
**A broken or half-finished auto-update** — Auto-updates can fail mid-process, leaving files partially written or a plugin out of sync with its database changes. The result is a fatal error or a feature that silently stops working, with no warning that the update didn't fully complete. Because it ran on its own, you may not even know which update caused it.
**Cache showing a stale or mismatched version** — Page caching, object caching, or a CDN can keep serving old files while the database expects the new ones, which produces broken layouts or missing functionality. Sometimes the update is fine and only the cache is wrong. Clearing every cache layer is the first thing to rule out.
**A theme update overwrote your customizations** — If custom code was added directly to a theme rather than a child theme, updating that theme wipes those changes. The site doesn't error, but your design, layout tweaks, or custom functions simply vanish. The fix is restoring those changes into a child theme so the next update can't erase them.
### How to fix it yourself
If you're comfortable in wp-admin and you have a backup, here are the safe first steps to try, in order.
1. **Take a backup before you touch anything** — Even though the site is broken, back up the current files and database first so you can't make things worse. If you can't reach wp-admin, your host's backup tool or file manager can usually do this. Never start undoing an update without a restore point in hand.
2. **Deactivate the plugin you updated most recently** — If you know which plugin updated just before the break, deactivate it from the Plugins screen and check whether the site recovers. If you can't reach wp-admin, rename that plugin's folder in /wp-content/plugins via FTP or your host's file manager to force it off. If the site comes back, you've found the culprit.
3. **Isolate the conflict by deactivating plugins** — If the recent plugin wasn't it, deactivate all plugins, confirm the site works, then reactivate them one at a time until it breaks again. The plugin that breaks it is your conflict. This is tedious but it reliably points to the exact pair of plugins or the plugin-versus-theme clash.
4. **Clear every cache layer** — Purge your caching plugin, any server or object cache, and your CDN, then hard-refresh in a private browser window. A surprising number of "broken after update" reports are just a stale cache serving old files against a new database. Rule this out before assuming the code is at fault.
5. **Restore from your last good backup** — If you can't isolate the cause, roll back to the backup taken before the update. Be aware this also reverts any content, orders, or form entries created since that backup, so on an active site you can lose recent data. Restoring undoes the symptom but not the underlying incompatibility, so the same update can break it again next time.
### When to get help
If the DIY steps don't recover the site, or you'd rather not risk an active business site, that's where we come in. We back up first, identify exactly which update caused the conflict, roll back the offending piece, and resolve the underlying incompatibility so the fix holds, then we document every change we made so you have a record. Quick Fix is $129, backed by our money-back guarantee, and we'll set up version pinning and staged updates so a future update is tested before it ever touches your live site.
### FAQ
**Q: How do I know which update broke my site?**
A: Check your update history, your host's logs, or the WordPress activity log to see what changed right before the break, then deactivate that item first. If nothing's logged, deactivating plugins one at a time will isolate it. The piece that, when turned off, brings the site back is your cause.
**Q: Should I just turn off automatic updates?**
A: Disabling auto-updates stops surprise breakages, but it also leaves you exposed to security holes that updates patch, so it's a trade-off rather than a clean fix. The better approach is to keep updates running but test them on a staging copy first. That way you get the security benefit without the live-site risk.
**Q: Will I lose my content or recent orders if you fix it?**
A: No. We back up first and work without wiping your data, and we roll back only the specific update that caused the break rather than restoring the whole site. The exception is restoring a full backup yourself, which can revert anything created since that backup. We avoid that whenever the conflict can be fixed more precisely.
**Q: Can you stop this from happening again?**
A: Yes. We pin the versions that are known to work together and set up a staging environment so future updates are tested on a copy before they reach your live site. If an update is going to cause a conflict, you find out on staging instead of in front of your visitors.
**Q: How fast can you fix it?**
A: Most post-update breaks are resolved quickly once we identify the conflicting update, since the hard part is diagnosis, not the repair. Our Quick Fix at $129 covers exactly this kind of issue. We'll confirm what broke and what we changed before we close it out, and the work is backed by our money-back guarantee.
## Speed Up WordPress: Why Your Site Is Slow and How to Fix It
(https://wpmend.com/fix/speed-up-wordpress)
Most WordPress sites are slow for a handful of predictable reasons: no caching, oversized images, too many heavy plugins, and a host or PHP version that can't keep up. The good news is that performance is almost always fixable without rebuilding the site — and you can land most of the wins yourself or have a senior engineer do it cleanly in an afternoon.
### What you're seeing
- Pages take more than 2-3 seconds to load, especially the homepage and product pages
- Google PageSpeed Insights or Lighthouse scores in the red, with failing Core Web Vitals
- Slow Largest Contentful Paint (LCP) — the main image or headline takes too long to appear
- Layout that jumps as the page loads (poor CLS) or sluggish response to taps and clicks (poor INP)
- The site drags on mobile or on slower connections, even when it feels fine on your fast office Wi-Fi
### What causes it
**No caching** — Without page caching, WordPress rebuilds every page from PHP and the database on each visit, which is slow and repetitive. A good caching layer serves a ready-made HTML copy instead, often cutting load time dramatically. This is usually the single biggest, easiest win.
**Unoptimized, oversized images** — Huge images straight from a phone or stock library are the most common cause of slow LCP and bloated pages. Serving a 4000px JPEG into a 600px slot forces visitors to download far more than they need. Compressing, resizing, and serving modern formats like WebP fixes this fast.
**Too many or heavy plugins** — Every active plugin can add scripts, styles, and database queries to every page — and a few poorly built ones can dominate your load time. The problem is rarely the raw count; it's the heavy outliers. Auditing what each plugin actually costs is what matters.
**Bloated page builders and themes** — Drag-and-drop builders and do-everything themes ship large amounts of CSS and JavaScript whether a page uses it or not. That extra weight slows rendering and hurts INP on interaction-heavy pages. Trimming unused assets and deferring non-critical scripts recovers a lot of speed.
**Slow host, old PHP, and no CDN** — Cheap shared hosting and outdated PHP versions add latency to every single request before a page even starts rendering. Modern PHP is significantly faster, and a CDN serves images and assets from a location near the visitor. Together they reduce both server response time (TTFB) and global load times.
**Render-blocking CSS/JS and a bloated database** — Scripts and stylesheets loaded in the wrong order block the browser from painting the page, delaying what visitors see. Meanwhile, years of post revisions, expired transients, and orphaned plugin data slow every database query. Cleaning both makes the site feel snappier without changing how it looks.
### How to fix it yourself
Most of these are safe to try yourself, but always take a full backup first and test on a staging copy if you can — performance changes can break layout or functionality if pushed straight to a live site.
1. **Install and configure a caching plugin** — Add a reputable caching plugin and enable page caching first, then test before turning on aggressive features like JS deferral or minification. Those advanced options give the biggest speed gains but are also the most likely to break a layout or a form. Change one setting at a time and re-check the site after each.
2. **Compress and right-size your images** — Run your media library through an image optimization plugin to compress files and generate WebP versions automatically. Make sure large hero and header images aren't being served at full resolution into small spaces. This alone often fixes a failing LCP score.
3. **Audit and remove unused plugins** — Deactivate plugins you no longer use, and look for the one or two heavy ones adding the most scripts and queries. Test the site carefully after each removal, since some plugins leave behind shortcodes or functionality other pages depend on. Fewer, lighter plugins almost always mean a faster site.
4. **Update your PHP version** — Check your hosting control panel for the PHP version and move to a current, supported release if you're on an old one. Newer PHP is meaningfully faster and more secure, but some older plugins or themes can be incompatible. Back up and test thoroughly before switching the live site over.
5. **Clean up the database** — Use a maintenance plugin to clear out post revisions, expired transients, and orphaned data that accumulate over time. A leaner database means faster queries on every page load. Always back up the database first — cleanup operations are hard to undo.
### When to get help
If the DIY steps don't get you into the green, the speed problem is tangled up with your theme or page builder, or you'd simply rather not risk a live production site, that's exactly what our Speed Pass ($199) is for. A senior engineer takes a full backup first, finds and fixes the real bottlenecks, and documents every change — and you get a clear before/after report showing your improved load times and Core Web Vitals. It's backed by our money-back guarantee, so if we can't make a real difference, you don't pay.
### FAQ
**Q: Why is my WordPress site so slow?**
A: Almost always a combination of no caching, oversized images, a few heavy plugins or a bloated page builder, and a slow host or outdated PHP version. These add up to slow load times and failing Core Web Vitals. The fixes are well understood and usually don't require rebuilding the site.
**Q: What are Core Web Vitals and why do they matter?**
A: They're Google's three real-world performance metrics: LCP (how fast the main content appears), INP (how quickly the page responds to interactions), and CLS (how much the layout shifts while loading). They affect both user experience and search rankings. A genuinely fast site passes all three, not just an isolated PageSpeed score.
**Q: Will a caching plugin alone make my site fast?**
A: Caching is usually the biggest single improvement, but it rarely fixes everything on its own. Oversized images, heavy plugins, and render-blocking scripts still need attention. The best results come from addressing the actual bottlenecks together rather than relying on one plugin.
**Q: Is it safe to speed up WordPress myself?**
A: Many steps are safe if you back up first and test changes before pushing them live. The risk comes from aggressive optimization settings — JS deferral, minification, lazy loading — which can break layouts, forms, or sliders. Go one change at a time and check the site after each, or hand it to an engineer who tests as they go.
**Q: What does the Speed Pass include and how long does it take?**
A: A senior engineer backs up your site, diagnoses the real causes of slowness, applies and tests the fixes safely, and delivers a documented before/after report on your load times and Core Web Vitals. Most sites are handled in a single focused session, not over days. It's $199 with a money-back guarantee if we can't meaningfully improve your speed.
============================================================
# Blog — WordPress articles
============================================================
## Why WordPress Contact Forms Stop Sending Email
(https://wpmend.com/blog/wordpress-contact-forms-stop-sending-email)
Published 2026-09-12 · Maintenance
If your WordPress contact form sends nothing, the problem is usually not the form itself. In most cases, the message is being blocked by mail delivery, a plugin conflict, a bad recipient setting, or spam protection that is too aggressive.
The safest way to fix it is to test the form, confirm whether the submission is being created at all, then work outward from the simplest causes: form settings, email delivery, plugin conflicts, and server mail configuration. Back up your site before changing anything risky.
What broken contact forms usually look like
Contact form problems do not always look the same. Sometimes the form appears to work, but no email arrives. Sometimes the button spins forever, the page reloads with no confirmation, or users see a validation error even when every field is filled in.
You might also notice that form submissions work in one browser but not another, or that messages only fail for certain recipients. That often points to a JavaScript issue, a caching problem, or a mail delivery issue rather than a broken form field.
The most likely causes
When a contact form stops working in WordPress, the root cause is usually one of these:
The “From” address is set to a domain that your server cannot send as, so mail gets rejected or marked as spoofed.
WordPress is using wp_mail(), but the server’s mail function is blocked, misconfigured, or poorly trusted by inbox providers.
A plugin or theme conflict is breaking the form’s JavaScript or AJAX submission.
Spam protection such as CAPTCHA, honeypot rules, or firewall rules is blocking real users.
Caching or optimization is serving a stale page or breaking scripts required by the form.
The form plugin settings changed after an update, migration, or domain move.
The site is sending mail, but it is landing in spam because the domain does not have proper SPF, DKIM, or DMARC records.
Fix it step by step, starting with the safest checks
1. Test the form from the front end
Submit the form yourself using a real inbox you control. Note exactly what happens: does the page confirm success, reload, show an error, or do nothing? That tells you whether the issue is with the form submission, the email delivery, or both.
If the form plugin stores entries, check whether the submission is being saved in the dashboard. If entries are saved but mail is not arriving, the problem is almost certainly delivery, not the form fields.
2. Check the recipient and sender settings
Open the form settings and confirm the destination email address is correct. It is easy to typo the recipient or leave an old address in place after a site or staff change.
Then inspect the sender settings. The safest setup is usually to send from an address on your own domain, such as no-reply@yourdomain.com, while setting the reply-to field to the visitor’s email address. Do not set the “From” address to the visitor’s address unless your form plugin specifically recommends it and your mail setup supports it.
3. Rule out a mail delivery problem
WordPress core does not send mail through a modern transactional mail service by default. On many hosts, PHP mail is unreliable or restricted, and messages quietly fail or get filtered.
If your form plugin supports SMTP or a transactional mail service, configure it and send a test message. This is often the single most effective fix. If you already use SMTP, check that the credentials, port, encryption, and sender domain are still valid after any hosting or password changes.
Also verify your domain’s SPF, DKIM, and DMARC records. These DNS records help receiving mail servers trust messages that claim to come from your domain. If they are missing or incorrect, contact-form mail is much more likely to land in spam or be rejected.
4. Disable caching and optimization on the form page
Cache plugins, script minifiers, and some performance tools can break forms, especially ones that rely on JavaScript, AJAX, or nonce values. Exclude the contact page from page caching first, then test again.
If the form still fails, temporarily disable features such as JavaScript delay, combine, minify, and defer settings. Re-test after each change. If the form starts working, re-enable optimizations one at a time until you find the setting causing the breakage.
5. Look for plugin or theme conflicts
Contact forms often fail after a plugin update, theme change, or security plugin rule change. A conflict can stop form submission, block the AJAX request, or interfere with the email handler.
The safest test is to use a staging site. If you have one, temporarily switch to a default theme and deactivate nonessential plugins, then test the form again. If the form starts working, reactivate plugins one by one until the problem returns.
If you do not have staging, make a backup first. Then disable plugins in groups, not one at a time forever, so you can narrow the cause without a long outage.
6. Check spam protection and security rules
CAPTCHA and anti-spam tools can be too aggressive, especially after IP reputation changes, firewall rule updates, or site migrations. A form may appear normal but fail silently for visitors while passing only for admins.
Review CAPTCHA keys, honeypot settings, firewall blocks, and security plugin logs. If you recently changed domain names, re-issue the CAPTCHA keys for the new domain. If a security plugin is flagging legitimate submissions, whitelist the form endpoint or reduce the rule sensitivity.
7. Verify the form plugin itself
Some forms break because of missing plugin files, corrupted settings, or outdated add-ons. If the plugin has a built-in test mail feature, use it. If it has entry logging, confirm whether submissions are being recorded.
If the plugin was recently updated and the issue started afterward, review its changelog and settings first. Sometimes a field mapping, notification template, or reCAPTCHA integration needs to be reconfigured after an update.
8. Inspect the browser console and network request
If the form looks fine but submits poorly, open your browser’s developer tools and watch for JavaScript errors or failed network requests. A broken script, blocked file, or 403 response often explains why the form button does nothing.
Common clues include a failed REST API request, an uncaught JavaScript error, or a blocked request to a third-party validation service. Those errors usually point directly to the plugin or optimization layer causing the break.
A practical diagnosis order that saves time
If you want the shortest path to a real fix, use this order:
Submit a test entry and confirm the exact failure.
Check recipient, sender, and reply-to settings.
Send a mail test through SMTP or your mail plugin.
Temporarily disable caching and script optimization on the contact page.
Test for plugin or theme conflicts on staging.
Review CAPTCHA, security plugin, and firewall settings.
Confirm SPF, DKIM, and DMARC records for the sending domain.
That sequence covers the most common causes without jumping straight into risky changes.
How to prevent contact forms from breaking again
Once the form is working, stabilize it so it stays working. Keep the form plugin updated, but test updates on staging first when possible. Use a proper mail delivery setup instead of relying on default server mail. Exclude contact pages from aggressive cache rules, and avoid changing sender addresses without checking authentication records.
It also helps to document which plugin powers the form, which SMTP service you use, and which page exclusions your cache plugin needs. When something breaks later, you will not have to rediscover the setup from scratch.
If you want a broader way to avoid update-related surprises, read this guide on WordPress broke-after-update issues. If you suspect the form is just one symptom of a larger site problem, browse the full WordPress fix guides.
When to call a professional
Bring in help if the form breaks after a migration, if mail is failing across the whole site, if you see security blocks you do not understand, or if you are not comfortable changing DNS, SMTP, or plugin settings. Those are all fixable issues, but the wrong change can affect every email your site sends.
If you need a fast, backup-first diagnosis, Mend can inspect the site, identify the exact failure point, and fix it with a plain-English report of what changed. Start with free diagnosis if you are not sure what is wrong, or use Quick Fix for a smaller form or mail problem that needs a same-day engineer.
If the site is completely unreliable, submissions are urgent, or the issue is tied to a hacked plugin, broken update, or mail outage, Emergency Rescue is the safer path. If you want secure access without sharing passwords, you can also connect your site securely with the free Mend Connect plugin.
What a real fix should include
A proper fix does more than make one test message arrive. It should confirm the form submits correctly, verify the email reaches the intended inbox, and make sure the delivery path is authenticated enough to survive inbox filtering. If the root cause was a conflict or bad optimization setting, the fix should also make it clear which setting caused the break so it does not return.
That is especially important if your form sends leads, support requests, or order inquiries. A broken form can look like a quiet inconvenience while it is actually cutting off revenue and customer communication.
If you have already checked the obvious settings and the form still fails, it is usually faster to diagnose the mail path and plugin conflict together than to keep guessing. Mend handles that kind of WordPress fix every day, with a backup-first workflow and a fixed price before work starts.
### FAQ
**Q: Why does my WordPress contact form work in the dashboard test but not on the live page?**
A: That usually means the form settings are fine, but something on the front end is breaking submission. Common causes are cache, JavaScript errors, a theme conflict, or a security rule blocking the request.
**Q: Should I use the visitor’s email address as the From address?**
A: Usually no. Use a sender address on your own domain and set the visitor’s email as Reply-To instead. That avoids mail authentication problems and reduces the chance of rejection.
**Q: How do I know if the problem is email delivery or the form itself?**
A: If submissions are saved in the plugin but no email arrives, it is a delivery problem. If the form will not submit or shows errors, it is more likely a JavaScript, plugin, or spam-protection issue.
**Q: What is the safest first step before changing anything?**
A: Back up the site, then test the form and check whether entries are being stored. That gives you a clear starting point and protects you if a setting change makes things worse.
## Image Optimization for WordPress That Actually Moves the Needle
(https://wpmend.com/blog/image-optimization-wordpress-that-moves-the-needle)
Published 2026-09-11 · Performance
If your WordPress site feels slow, image optimization is often the fastest place to get a real win. The trick is not “make every file smaller at all costs” — it’s to reduce the bytes browsers must fetch, serve the right image size to the right device, and avoid formats or settings that quietly make pages heavier.
The biggest gains usually come from three things: resizing oversized images before upload, converting hero and content images to modern formats where appropriate, and making sure WordPress is not forcing visitors to download full-size files on mobile. Those changes often help more than adding another plugin or chasing tiny score improvements.
What you’re probably seeing
This problem usually shows up in a few familiar ways:
Pages load quickly on a strong desktop connection but feel sluggish on phones.
Largest Contentful Paint is poor because the top image is huge.
Image-heavy pages are fine in the editor but slow in the browser.
Your media library is full of very large uploads from a phone, camera, or designer handoff.
You already compressed images, but the site still feels slow.
That last one is important. Compression helps, but many WordPress sites are still wasting time and bandwidth because they send images at the wrong dimensions, load too many images too early, or keep using unnecessarily large originals in templates.
Why image optimization matters more than most site owners realize
Images are often the heaviest assets on a WordPress page. Unlike text or code, image files can dominate page weight even when the rest of the site is well built. If a homepage includes a 3 MB hero image and a dozen other large images below the fold, you can end up with a page that feels slow even on decent hosting.
For many sites, the “real” performance problem is not WordPress itself. It is the combination of oversized uploads, poor sizing in the theme, and lazy loading that is too aggressive or not targeted well. Fixing that usually gives a more visible speed gain than shaving a few kilobytes off scripts.
The best image optimization workflow for WordPress
1. Start with the source image, not the plugin
The safest and most effective first step is to make the original file reasonable before it ever reaches WordPress. If your layout only displays an image at 1200 pixels wide, do not upload a 5000-pixel version and expect WordPress to clean it up later.
As a general rule:
Resize images to the largest size they will actually display.
Use the minimum quality that still looks clean for the content type.
Keep product, portfolio, and hero images sharper than decorative background images.
If you are exporting from design tools, use the layout width as your target, not the camera’s original resolution. A well-prepared 1600px image usually beats a bloated 5000px upload every time.
2. Check whether WordPress is serving the right size
WordPress generates multiple image sizes when you upload media, which is helpful only if your theme actually asks for the correct one. If a template displays a 400px card image but loads a much larger file, you are paying for pixels the visitor never sees.
Open a page and inspect an image in your browser. If the displayed size is much smaller than the downloaded file dimensions, your theme or page builder may be requesting the wrong size. That is especially common in templates, sliders, featured-image blocks, and custom homepage sections.
Fixing this may involve changing the image size setting in the block, template, or theme code. If you are not comfortable editing templates, back up first and work carefully. A small layout mistake can affect every page that uses that component.
3. Use modern formats where they make sense
WebP is widely supported in modern browsers and often reduces file size compared with JPEG or PNG. For many sites, it is one of the easiest ways to lower image weight without a visible quality drop.
That said, modern format support and handling can depend on your WordPress version, theme, and any optimization plugin or host feature you use. If your setup already serves WebP correctly, great. If not, test one section of the site before converting everything.
Use these broad guidelines:
JPEG or WebP for photos and complex images.
PNG only when you need transparency or sharp line art that does not compress well as JPEG.
SVG for logos and simple vector graphics, if your site allows them safely.
Do not convert every file blindly. A tiny logo saved as a bloated JPEG is a problem, but so is a detailed photo forced into PNG when it does not need transparency.
4. Compress images, but stop treating compression as the whole job
Compression reduces file size, but it cannot fix an image that is four times larger than the layout requires. If you rely only on compression, you may still serve files that are technically optimized but structurally wrong.
Think of compression as the second step, not the first. Resize to the correct dimensions, then compress to a reasonable quality level. That sequence usually gives the best mix of quality and speed.
5. Audit lazy loading carefully
Lazy loading is useful when it delays offscreen images, but it should not slow down the hero image above the fold. If your first visible image is lazy loaded, the browser may wait too long and make the page feel broken or sluggish.
Check whether your theme or optimization plugin is excluding the main hero image from lazy loading. Also make sure decorative images below the fold are not being loaded too early. Good lazy loading is selective, not universal.
6. Be careful with sliders, galleries, and background images
Sliders often bundle several large images into the initial page load, even when only one is visible at first. Galleries can also be heavy if they load full-size files instead of thumbnails or medium sizes.
Background images are another common trap. They are easy to design with, but if they are large, they can be expensive to load and hard to optimize through standard WordPress image controls. When a background image matters for performance, check its size just as carefully as any content image.
A practical checklist that actually helps
If you want the highest-value workflow, use this order:
Back up the site before changing image processing, theme templates, or media settings.
Find the heaviest pages with the most visible image load.
Resize oversized source files before upload.
Serve the correct image dimensions in the theme or block settings.
Convert suitable images to modern formats such as WebP.
Compress images after resizing.
Exclude the hero image from lazy loading if needed.
Test the page on mobile, not just desktop.
If you want a deeper technical walk-through of how to speed up image-heavy pages overall, see Speed Up WordPress: Why Your Site Is Slow and How to Fix It.
What not to do
Some common “optimizations” create new problems without improving real speed:
Installing multiple image plugins that all try to process uploads.
Running aggressive automatic compression on images that need visual quality, like product photos.
Converting every image to the same format without checking transparency or display use.
Deleting every large image from the media library before confirming it is not used in templates.
Changing image settings without testing on staging or after a backup.
The most useful image work is boring and deliberate. It is less about chasing perfect scores and more about removing unnecessary weight from the pages people actually visit.
How to test whether the changes worked
After you make changes, check the actual page behavior, not just a plugin dashboard. Open the site on a phone or in a throttled browser test and look at:
How quickly the hero image appears.
Whether content images load at the correct size.
Whether the page shifts around as images load.
Whether the total image weight has dropped on the pages that matter most.
If possible, compare one important page before and after. A good improvement is easy to see: less waiting, fewer giant downloads, and a page that feels much more responsive.
How to prevent image bloat from coming back
The easiest way to prevent future image problems is to set a simple upload standard for your site. If multiple people add content, give them a rule like this: always resize images to the final display size before upload, avoid screenshots larger than needed, and use the right format for the job.
If you manage an editorial site, publish a short media checklist for contributors. That prevents the slow creep where every new post adds another oversized file to the page.
You should also review theme changes carefully. A new homepage layout, slider, or page builder element can undo months of good image discipline by loading larger assets or more of them at once.
When to call a professional
If your site is still slow after basic image cleanup, the issue may be in the theme’s image sizing, a page builder’s output, a CDN configuration, or a plugin conflict. Those are fixable, but they are also the point where trial-and-error can waste time or break layouts.
If you need help finding the actual bottleneck, Mend can diagnose the problem first and quote a flat price before any work begins. Start with free diagnosis, or if the site is visibly broken or a business-critical page is suffering, use Emergency Rescue. Mend works backup-first, uses secure access through Mend Connect, and every paid fix includes a plain-English report of what changed.
If your image issue is part of a wider performance problem, it may be worth reading How Plugins Really Slow Down WordPress (And How to Audit Them) and The Smart WordPress Backup Plan and Restore Test as well.
Sometimes the fastest way to move forward is not another plugin. It is having a senior engineer trace the real cause, fix it safely, and hand back a site that loads like it should.
### FAQ
**Q: Do I need an image optimization plugin for WordPress?**
A: Not always. Many sites get better results from resizing uploads correctly and fixing theme image sizes first. A plugin can help, but it cannot fully compensate for oversized source files or bad template output.
**Q: Should I convert all my images to WebP?**
A: Usually no. WebP is a strong choice for many photos and graphics, but you should still use PNG when transparency or sharp detail needs it, and you should test how your site serves the format before converting everything.
**Q: Why is my site still slow after compressing images?**
A: Compression only reduces file size; it does not fix incorrect dimensions, too many images on one page, or a theme that loads the wrong sizes. If the page still feels slow, the issue is often in the delivery, not the file itself.
**Q: Is lazy loading always good for WordPress images?**
A: No. It helps for images below the fold, but it can hurt if your main hero image is delayed. The first visible image should usually load immediately, while offscreen images can be deferred.
## Stop WordPress Brute-Force Login Attacks Fast
(https://wpmend.com/blog/stop-wordpress-brute-force-login-attacks-fast)
Published 2026-09-10 · Security
If bots are hammering your login page, the fastest safe fix is to limit or block repeated login attempts, harden your login page, and check whether your site is already compromised. Start with backups, then add protection at the edge or in WordPress, because brute-force traffic can be a nuisance on its own or a sign of a deeper security problem.
The goal is not to “win” against every bot forever. It is to make your login system expensive to attack, easy to monitor, and hard to abuse even if your username is known.
What brute-force login attacks look like
Brute-force attacks are automated attempts to guess your WordPress username and password. Most are noisy and repetitive, but some are slow and distributed, which makes them harder to spot.
You may notice:
Repeated login failures in your security plugin or host logs
Slow admin pages because of constant authentication attempts
Unexpected account lockouts for real users
Spammy XML-RPC or REST API requests, depending on the attack pattern
Email alerts about failed logins, sometimes in bursts at odd hours
In many cases, the site still works normally on the front end. That does not mean you can ignore it. Repeated login attacks can waste server resources, fill logs, trigger account lockouts, and sometimes succeed if weak passwords or leaked credentials are in play.
The likely causes
WordPress is a common target because it is widely used and its login endpoints are predictable. Attackers often rely on a few things:
Weak or reused admin passwords
Publicly known usernames like “admin”
Unrestricted login attempts at /wp-login.php
XML-RPC enabled when it is not needed
No rate limiting, firewalling, or 2FA
Leaked passwords from other sites that get tried here too
If your site was recently migrated, restored, or handed over by another team, also check whether old admin accounts still exist. Brute-force attacks become much more dangerous when there are unused accounts, stale passwords, or poorly protected hosting panels.
Step 1: Make sure the site is not already compromised
Before you harden anything, confirm that this is truly just login abuse and not a breach. If an attacker has already logged in, changing one setting will not solve the underlying problem.
Look for these warning signs:
Unknown admin users
New plugins or themes you did not install
Redirects, injected code, or strange popups
Sending email from WordPress that you did not configure
Hosting alerts about malware or suspicious files
If anything looks off, follow a proper cleanup path first. Our guide on how to clean up a hacked WordPress site safely explains the safer order of operations. If you are seeing lockout symptoms instead, Locked Out of WordPress Admin: Why It Happens and How to Fix It covers account recovery without making the problem worse.
Step 2: Back up before changing security settings
Even security changes can break logins for real users, especially on sites with membership features, custom login plugins, SSO, or aggressive host firewalls. Back up the database and files first, and if possible test the backup restore path too.
If you want a practical backup approach that does not become busywork, read The Smart WordPress Backup Plan and Restore Test or A Sensible WordPress Backup Strategy You Can Actually Use.
Step 3: Add login rate limiting
The most effective first defense is to limit repeated login attempts. You can do this with a security plugin, a host-level firewall feature, or a web application firewall. The safest option depends on your stack, but the outcome should be the same: repeated failures from the same source should slow down or stop.
When choosing a method, prefer:
Server-side or firewall-based rate limiting when your host provides it
A reputable security plugin if you manage the site yourself
Lockout rules that expire automatically, so real users are not blocked forever
Be careful with overly strict settings. Too many failed attempts from shared office IPs, mobile carriers, or legitimate users who mistype passwords can create support headaches. Start conservatively, then tighten as needed.
Step 4: Protect the login page itself
WordPress login protection usually works best in layers. Here are the safest and most useful additions:
Use strong passwords for every admin, editor, and host account.
Enable two-factor authentication for accounts that can publish, install, or update.
Rename or hide the login path only if your setup supports it cleanly; some custom-login plugins can conflict with caching, SSO, or membership tools.
Restrict access by IP if only a small team needs admin access and your IPs are stable.
Require CAPTCHA sparingly if bots are overwhelming the form and your audience can tolerate the friction.
Two-factor authentication is one of the best returns on effort. If a password is reused or leaked elsewhere, 2FA can stop the attack from becoming a real compromise.
Step 5: Decide whether to block XML-RPC
Many brute-force campaigns use xmlrpc.php because it can be abused for login attempts and pingback spam. If you do not need XML-RPC for Jetpack, remote publishing, or another specific integration, disabling or restricting it can remove an easy attack path.
Do not disable it blindly on sites that depend on it. Some hosts, plugins, or integrations still use XML-RPC, and turning it off can break legitimate workflows. If you are unsure, check your plugin list and host documentation before changing it.
Step 6: Add a firewall or CDN in front of the site
A web application firewall or CDN can block obvious bot traffic before it reaches WordPress. This is especially useful if attacks are causing load spikes or filling logs faster than WordPress plugins can handle them.
Look for protections such as:
Login rate limiting
Bot filtering
Country or ASN blocking when appropriate
Rules for /wp-login.php and /xmlrpc.php
This layer is often the best place to absorb the noise. It reduces server work and can also protect against other common attacks. But do not treat it as your only defense; keep strong credentials and 2FA in place.
Step 7: Clean up weak points that make attacks easier
Brute-force attempts are much more dangerous when the site has avoidable weak points. Tighten these up:
Delete unused admin accounts
Rename administrator roles where practical through proper user management, not hacks
Review password reset settings and user registration behavior
Remove outdated plugins and themes you do not use
Keep WordPress, plugins, and themes updated on a safe schedule
It is also worth checking whether your site is slow or unstable, because attackers often generate the same load that exposes performance problems. If brute-force traffic is contributing to general slowness, our guide on Speed Up WordPress: Why Your Site Is Slow and How to Fix It can help you separate security issues from performance issues.
How to monitor the problem after you fix it
Once protections are in place, watch for a few days. You want to know whether the attack is blocked, whether legitimate users are being affected, and whether there is a second problem hiding behind the login noise.
Monitor:
Failed login counts
Lockout events
New admin account creation
Changes to plugin or theme files
Traffic spikes to login endpoints
If your host provides logs, check whether the requests are coming from one IP, a small set of IPs, or a distributed network. Distributed attacks usually need edge-level protection rather than a simple IP block.
How to prevent brute-force attacks long term
The best long-term setup is layered and boring, which is exactly what you want. Use a strong password manager, 2FA for privileged accounts, automatic backups, timely updates, and a firewall or security layer that can rate limit login abuse.
For sites that cannot afford downtime or lockouts, a managed care plan can be the difference between “annoying” and “handled.” Mend’s Care Plan covers updates, backups, security, and uptime monitoring, which is useful if you want ongoing protection without maintaining it yourself.
When to call a professional
Bring in a WordPress engineer if you see any of the following: repeated lockouts across multiple users, suspicious admin accounts, malware warnings, blocked payment or membership logins, or attacks that keep returning after you harden the site. You should also get help if your host says the site is abusing resources or if you are not sure whether XML-RPC, caching, SSO, or a firewall change will break something.
If you need a fast diagnosis, start with free diagnosis. If the site is under active attack or you are already locked out, Emergency Rescue is the better path. Mend’s senior engineers work backup-first, usually fix the issue the same day, and send a plain-English report showing the root cause and exactly what changed. If you want to connect the site securely without sharing passwords, use Mend Connect.
Brute-force login attacks are common, but they are manageable. The practical fix is not one plugin or one setting; it is layered protection, strong credentials, and monitoring that tells you when the story changes from “bots are noisy” to “someone got in.”
If you want a broader playbook for login abuse, read WordPress Brute-Force Attacks: Stop Bot Login Spam after this article for another angle on the same problem.
### FAQ
**Q: Should I disable XML-RPC to stop brute-force attacks?**
A: Maybe, but only if your site does not need it for legitimate features. It can reduce attack surface, but disabling it blindly can break plugins or workflows that depend on it.
**Q: Is a CAPTCHA enough to stop login bots?**
A: No. CAPTCHA can help, but it should be one layer in a larger setup that includes rate limiting, strong passwords, and 2FA.
**Q: What’s the safest first step if I think my site is under attack?**
A: Back up the site, then check whether there are any signs of compromise. After that, add login rate limiting and stronger authentication controls.
**Q: How do I know if this is brute-force traffic or a hacked site?**
A: Brute-force traffic usually shows repeated failed logins with no file changes or strange users. If you find unknown admin accounts, altered files, or redirects, treat it as a security incident and clean it up first.
## Critical Error on WordPress: Fast Fixes That Actually Help
(https://wpmend.com/blog/critical-error-wordpress-fast-fixes)
Published 2026-09-09 · Errors
If WordPress shows “There has been a critical error on this website,” it usually means a plugin, theme, or custom code has triggered a fatal PHP error. The fastest safe approach is to back up first, then isolate the last change, recover access if needed, and read the recovery email or debug log to find the exact fault.
The good news is that this message is a symptom, not a diagnosis. In many cases you can fix it by disabling one plugin, switching themes, or restoring a small file change without touching content or the database.
What this error usually looks like
You may see the message on the front end, in wp-admin, or both. Sometimes WordPress also sends an email to the site admin address with the phrase “Your Site is Experiencing a Technical Issue” and a special recovery link.
Common signs include:
The homepage loads the critical error message instead of your site.
The dashboard is inaccessible or only partially loads.
The error appears right after updating a plugin, theme, or WordPress core.
The site works for some logged-in users but not visitors, or vice versa.
You get a white screen, a 500 error, or a critical error on only one part of the site.
The most likely causes
This message is generated when WordPress catches a fatal PHP error. That fatal error is usually caused by one of a handful of issues:
A broken plugin update or plugin conflict.
A theme problem, especially in custom or child theme code.
PHP version mismatch after a hosting change or server upgrade.
Memory exhaustion on a heavy page, plugin, or import.
Bad custom code in functions.php, a snippets plugin, or mu-plugins.
Corrupted core files after a failed update or file transfer.
Less commonly, malware or file tampering if the site was compromised.
If you want a broader decision tree for fatal errors, the related critical error fix guide is worth keeping open while you work.
Do this first: back up before changing anything
Before you deactivate plugins, rename folders, or edit files, make a full backup of both files and database. If you already have a known-good backup, confirm it can be restored. If you do not, make one now if the site is still accessible enough to do so.
A backup matters because the fastest fix often involves reversing the last change, and you do not want to make that guess without a safety net. If you need a backup process you can trust long-term, see our backup and restore test guide.
Step 1: Check the recovery email from WordPress
WordPress often sends an email to the site admin address when it detects a fatal error. That email may include the plugin, theme, or file responsible, plus a special “recovery mode” link that lets you log in safely and disable the faulty component.
Open that email first if you received it. If the recovery link works, use it to get back into the dashboard and then deactivate the suspected plugin or switch themes. This is the safest path because it avoids manual file changes.
If no email arrived, check spam, make sure your admin address is correct, and verify that your host can send mail reliably. Host email delivery varies, so no email does not mean no clue.
Step 2: Disable plugins the safest way
If you cannot access wp-admin, the usual safe move is to disable all plugins by renaming the plugins folder over SFTP or in your host file manager. WordPress will treat them as inactive when the folder name changes.
Connect by SFTP or use your host’s file manager.
Go to wp-content.
Rename the plugins folder to something like plugins-disabled.
Reload the site.
If the site loads after that, the problem is almost certainly one plugin or a plugin conflict. Rename the folder back to plugins, then disable plugins one by one from the dashboard until you find the culprit.
If you need a structured way to undo a recent bad update without admin access, the guide on what to do when WordPress breaks after an update walks through that sequence in more detail.
Step 3: Switch to a default theme
If disabling plugins does not help, the theme may be causing the fatal error. The cleanest test is to switch to a default WordPress theme such as Twenty Twenty-Four.
If you can get into wp-admin through recovery mode, change the active theme there. If you cannot, rename the active theme folder in wp-content/themes so WordPress cannot load it. WordPress should fall back to a default theme if one is installed.
If the site recovers after the theme switch, inspect any recent edits to functions.php, template files, or custom snippets. A small syntax mistake can bring down the whole site.
Step 4: Check the exact error in the debug log
The critical error message is intentionally generic. The real answer is usually in the PHP error log or the WordPress debug log. If you can safely enable logging, do it in a way that records errors without displaying them to visitors.
In wp-config.php, you can typically set debug logging like this:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
After refreshing the broken page, check wp-content/debug.log for the fatal error line. Look for the file path, plugin slug, theme name, or function mentioned in the stack trace.
If you want help interpreting those lines, use the debug log reading guide to separate the real cause from the noise.
Step 5: Increase memory if the error points that way
Some fatal errors are caused by memory exhaustion rather than a broken plugin. That is more common on shared hosting, WooCommerce sites, page builders, or imports.
If the log mentions “allowed memory size exhausted,” you can try increasing PHP memory in wp-config.php. The exact limit depends on your host and plan, so start conservatively and do not assume unlimited memory is available.
That said, memory bumps are a temporary fix, not the root cause. If a plugin needs much more memory than the site normally has, the real fix is often to optimize the plugin, adjust the task, or replace the code path causing the spike.
Step 6: Verify PHP version compatibility
A site can run fine for months and then fail after the host changes PHP versions. Older plugins and themes may break on newer PHP releases, while outdated servers may not support code a modern plugin expects.
Check your hosting panel for the active PHP version and compare it with the requirements of your theme and key plugins. If the error began right after a PHP upgrade, try rolling back one version temporarily to confirm compatibility.
Use this as a test, not a permanent solution. Once you know the version is the trigger, update or replace the incompatible code.
Step 7: Look for custom code and must-use plugins
Not every critical error comes from a normal plugin. Custom snippets, mu-plugins, and modified theme files can cause the same crash and are easy to overlook because they are not in the usual plugins list.
Check for:
functions.php edits made recently.
Snippet plugins with new code.
Files in wp-content/mu-plugins.
Child theme overrides added during a design change.
To isolate custom code, revert the latest edit first. If you are not sure what changed, compare the current files with a known-good backup or deploy snapshot.
Step 8: Rule out file corruption or malware
If the error appeared without a clear update or code change, or if you see unknown admin users, strange redirects, or files you did not add, treat the site as potentially compromised. Malware can trigger fatal errors by modifying core files or loading malicious code early.
Start by checking core WordPress files against a clean install and scanning the site files for obvious foreign PHP in unusual locations. Do not delete random files if you are unsure what they do. On a live site, careless cleanup can make recovery harder.
If you suspect compromise, follow the safe cleanup approach in our WordPress hacked cleanup guide.
How to prevent this from happening again
Most critical errors are preventable with boring but effective maintenance:
Keep a tested backup routine in place.
Update plugins and themes one at a time, not all at once.
Use a staging site for major theme, PHP, or builder changes.
Prefer well-maintained plugins with clear compatibility notes.
Review custom code before pushing it live.
Monitor PHP errors so you catch warnings before they become fatal.
If updates are where your site most often breaks, read how to safely update WordPress plugins, themes, and core for a better rollout process.
When to call a professional
If you have a backup but not the time to investigate, a senior engineer can usually isolate the fault much faster than trial-and-error. That is especially true when the error involves custom code, a complicated page builder, WooCommerce, multisite, or a server setting you do not control.
You should also get help if the recovery email never arrives, the site crashes again after every fix, or you are worried the issue is tied to malware or a failed update chain. Mend can diagnose the problem on a backup-first workflow, give you a plain-English report of the root cause, and fix it fast in most cases the same day. Start with a free Diagnosis, or go straight to Emergency Rescue if the site is down and you need help now.
If you want ongoing protection after the fix, a Care Plan can take updates, backups, security, and uptime monitoring off your plate.
Bottom line: the “There has been a critical error on this website” message is almost always a fatal PHP problem, and the real fix is to identify what changed last. Start with a backup, use the recovery email if you have it, disable plugins, test the theme, and read the log before making bigger changes.
### FAQ
**Q: Is the “critical error” the same as a white screen of death?**
A: They are related symptoms, but not identical. A critical error usually points to a fatal PHP problem, while a white screen can also be caused by memory issues, caching, or display problems.
**Q: Can I fix this without admin access?**
A: Yes. You can often recover by renaming the plugins or theme folder through SFTP or your host file manager. That disables the broken code without logging in.
**Q: What if I never got the WordPress recovery email?**
A: Check spam and confirm the admin email address is correct. If it still does not arrive, use debug logging or file-based isolation instead of waiting on the email.
**Q: Should I increase PHP memory first?**
A: Only if the error log points to memory exhaustion. It can help confirm the cause, but it is usually not the final fix.
## WordPress Stuck in Maintenance Mode After an Update
(https://wpmend.com/blog/wordpress-stuck-in-maintenance-mode-after-update)
Published 2026-09-08 · Updates
If WordPress is stuck in maintenance mode after an update, the site is usually waiting for an unfinished update process to clear the temporary .maintenance file in your site root. In most cases, the fix is simple: remove that file after confirming the update has really stopped and your backups are safe. If the problem keeps returning, the real cause is often a timeout, a filesystem permission issue, or a plugin/theme update that never completed cleanly.
This article gives you the safest way to get the site back online, check whether the update actually finished, and avoid making the problem worse. If you want a broader step-by-step breakdown of broken update behavior, see WordPress Site Broke After an Update? Here's What Happened and How to Fix It.
What “maintenance mode” actually means
During updates, WordPress creates a temporary file named .maintenance in the root of your WordPress install. While that file exists, WordPress shows the “Briefly unavailable for scheduled maintenance. Check back in a minute.” message instead of loading the site normally.
That’s fine when the updater finishes quickly. The problem starts when the process is interrupted. Common triggers include:
the browser tab was closed before the update finished
the server timed out during a plugin, theme, or core update
multiple updates ran at once and one stalled
low disk space or file permission issues stopped cleanup
a managed host paused or retried the update behind the scenes
So the symptom is not really the problem itself. It is the leftover sign that WordPress never got to complete cleanup.
First, confirm what is actually broken
Before deleting anything, check whether the site is only showing the maintenance page or whether the update caused a second issue underneath it. This matters because if the site is also broken in another way, removing the file may expose a fatal error or plugin conflict that was hidden by the maintenance screen.
Look for these signs:
the homepage and inner pages all show the maintenance message
the admin area may also be unavailable, or it may work normally
the message persists long after the update should have finished
refreshing the page, clearing cache, or using another browser makes no difference
If you can still access wp-admin, check whether WordPress is showing plugin or theme update notices. If you cannot access the admin area at all, go directly to the file-level fix below.
The safest fix: remove the stale .maintenance file
Always back up first if you can. Even though this fix is usually safe, any time you touch site files there is a chance of deleting the wrong thing or uncovering a deeper issue that needs a rollback.
Connect to your site using SFTP, your host’s file manager, or another file access tool.
Open the root directory of your WordPress install. This is the folder that contains wp-config.php, wp-content, wp-admin, and wp-includes.
Look for a file named .maintenance.
Delete .maintenance.
Reload the site and the admin area.
In many cases, that is all it takes. WordPress sees that the temporary file is gone and returns to normal.
If you do not see the file, do not assume the fix is elsewhere. Some hosts hide dotfiles by default, and some file managers do not show them unless you enable hidden files. If your site still shows the maintenance message and the file appears missing, ask the host whether the page is being cached at the server or CDN level.
Make sure the update really finished
Deleting .maintenance removes the lock, but it does not tell you whether the update completed correctly. That’s the part many site owners skip, and it’s why the issue comes back.
After the site loads, check the following:
visit the Plugins screen and confirm the intended plugin update shows as complete
check the Themes screen if a theme was updated
confirm WordPress core did not stop partway through
browse a few important pages on the front end
test forms, search, checkout, or any other critical path on the site
If the update was interrupted, the plugin or theme may now be half-updated. That can cause fatal errors, missing styles, or broken functionality even after maintenance mode is removed.
If the file keeps coming back, look for the real cause
When .maintenance reappears after every attempt, WordPress is not the true culprit. Something in the environment is preventing updates from completing cleanly.
1. Check for a timeout during large updates
Large plugins, themes with many files, and WordPress core updates can take longer than the server allows. Shared hosting is especially prone to this. If the server kills the process halfway through, WordPress may leave the maintenance file behind.
Clues include updates that consistently fail after a similar amount of time, or only larger updates causing the issue.
2. Check disk space
Low disk space can stop WordPress from unpacking update files and from cleaning up afterward. This is common on busy sites with many backups, logs, or image uploads.
Ask your host to confirm free disk space if you do not have shell access. On your own server, check storage before trying the update again.
3. Check file permissions and ownership
If the web server cannot write to the WordPress directory, update files may be created but not removed. The result can be a stuck maintenance screen, failed updates, or both.
Be careful here: changing permissions blindly can create a security problem. If you are not sure what your host expects, ask them to verify the correct ownership and permissions for the WordPress root and wp-content.
4. Check whether security tools are blocking the updater
Security plugins, host firewalls, or aggressive malware protection can sometimes interfere with the update process. That does not mean you should disable protection permanently. It means you may need to identify exactly which layer is blocking the write operation.
5. Check for a plugin or theme conflict
If the issue happens only after a specific plugin or theme update, the updated code may be incompatible with the rest of the site. In that case, the maintenance screen is only the first visible symptom.
If you need a careful rollback path and you no longer have a clean admin workflow, read Rolling Back Broken WordPress Updates When Admin Access Is Lost.
What not to do
When a site is down, it is tempting to start trying everything at once. That usually makes recovery slower.
Do not keep re-running the same update repeatedly without checking the cause.
Do not delete other files just because they look related.
Do not change random permissions values without understanding your host’s setup.
Do not clear caches and assume the problem is fixed if the file is still there.
Do not start deactivating plugins from the dashboard if the dashboard itself is part of the problem.
Also, if you are not sure whether the site was hacked or infected, pause and inspect that possibility before forcing more updates. A compromised site can mimic update failures and make cleanup much harder.
How to prevent maintenance mode from getting stuck again
The best prevention is to make updates smaller, safer, and easier to recover from.
take a fresh backup before major updates and confirm you can restore it
update one plugin or theme at a time instead of in a large batch
use a staging site for high-risk changes when possible
keep an eye on available disk space
avoid running updates during peak traffic if your host is resource-limited
check that security, caching, and optimization tools are not conflicting with updater behavior
A disciplined update process prevents most maintenance-mode incidents and makes the rare failure much easier to unwind. If you want a better long-term process, How to Safely Update WordPress Plugins, Themes, and Core is a good companion guide.
When to call a professional
Bring in help if the maintenance file comes back, if the site breaks again after you remove it, or if you are not sure whether the update left the site in a half-finished state. It is also worth getting help if the site is high value, e-commerce, or customer-facing and every minute offline matters.
That is the point where Mend can save time. You can start with a free diagnosis at /start/diagnosis, and if it is an urgent outage, use /start/emergency. Mend’s senior engineers work backup-first, send a plain-English report of the root cause and changes made, and back paid fixes with a fixed-or-your-money-back guarantee.
If you want a faster handoff, you can connect the site securely with the free Mend Connect plugin so no passwords need to be shared.
For recurring update problems, it may also make sense to move the site onto the Care Plan so updates, backups, security, and uptime monitoring are handled continuously instead of only after something breaks.
A quick recovery checklist
Step
What to do
Why it matters
1
Back up the site if possible
Protects you before any file changes
2
Check the root folder for .maintenance
Confirms the lock file is the issue
3
Delete .maintenance
Removes the stuck maintenance screen
4
Verify the update completed
Catches half-finished plugin, theme, or core updates
5
Investigate timeouts, permissions, or disk space if it returns
Finds the real reason it is stuck
If you are comfortable with file access, this is often a 5-minute fix. If not, or if the site is still unstable after you clear the message, the safest move is to stop guessing and get the root cause identified properly.
Related reading: WordPress 500 Errors: A Step-by-Step Diagnosis Guide and How to Read the WordPress Debug Log and Find the Real Cause.
### FAQ
**Q: Why does WordPress get stuck in maintenance mode after updating?**
A: Usually because the updater was interrupted before it could remove the temporary .maintenance file. Timeouts, low disk space, permissions issues, or a stalled plugin/theme update are common causes.
**Q: Is it safe to delete the .maintenance file?**
A: Yes, if it is the only thing keeping the site in maintenance mode. Back up first if you can, then delete the file from the WordPress root and check whether the update actually completed.
**Q: What if the .maintenance file is gone but the site is still broken?**
A: Then the update likely exposed a separate problem, such as a plugin conflict, a partial update, or a server-side caching issue. You should inspect the updated component and check for fatal errors.
**Q: How do I stop this from happening again?**
A: Update one item at a time, keep backups current, watch disk space, and use staging for riskier changes. If updates frequently hang, a managed care plan or professional fix can prevent repeated downtime.
## WordPress 500 Errors: A Step-by-Step Diagnosis Guide
(https://wpmend.com/blog/wordpress-500-error-step-by-step-diagnosis)
Published 2026-09-07 · Errors
If your WordPress site is showing a 500 Internal Server Error, the fastest fix is to work from the outside in: confirm whether the problem is site-wide or only on one page, check for a recent change, then test the most common causes in a safe order. Always back up first if you can, because several of the checks below involve disabling code or editing server files.
The key thing to know is that HTTP 500 is not one specific WordPress error. It is a generic server-side failure, which means the real cause could be a plugin, theme, corrupted .htaccess file, PHP memory limit, file permissions issue, or a hosting/server configuration problem. That is why step-by-step diagnosis matters more than guesswork.
What a WordPress 500 error usually looks like
You may see one of these symptoms:
A blank page or “Internal Server Error” message on the front end.
The dashboard works, but one page, post, or admin screen throws a 500 error.
The error appears after a plugin update, theme change, migration, or host-side change.
The site loads sometimes, then fails under load or after a cache purge.
Specific actions fail, such as saving a post, opening the Customizer, or visiting /wp-admin.
Because HTTP 500 is broad, the right move is not to “try random fixes.” It is to narrow down which layer is failing: WordPress code, PHP, web server rules, or the host environment.
The safest diagnosis flow, in order
1. Confirm the scope of the failure
First, check whether the 500 error affects the whole site or just one URL. Try the homepage, another public page, /wp-admin, and a direct file if you have one, such as an image in the Media Library. If only one page fails, the problem may be tied to that template, block, shortcode, or a specific request path.
If the whole site is down, keep going. If only one action fails, that narrows the search a lot and can save time.
2. Check for a recent change
Ask: what changed right before the error started? Common triggers include a plugin update, theme update, WordPress core update, new plugin installation, PHP version change, a migration, a security rule from the host, or edits to .htaccess. If you can connect the timing to one change, that is often the fastest path to a fix.
If the error began right after an update, see WordPress Site Broke After an Update? Here's What Happened and How to Fix It for a structured rollback-and-recovery approach.
3. Restore or duplicate before changing anything risky
If you have a recent backup, make sure it is usable before you start editing files. If you do not have a restore point, create one now if the site is still partly accessible. A good backup is the safest way to recover from a wrong turn while diagnosing a 500 error.
If backups are part of the problem rather than the solution, that is a sign the issue may be bigger than a simple WordPress setting. Mend’s free diagnosis can triage the fault and quote a flat price before any work, no card required.
4. Test plugins first by disabling them safely
Plugins are one of the most common causes of HTTP 500 errors. If you can access wp-admin, deactivate all plugins, then test the site. If the error disappears, reactivate plugins one by one until the error returns.
If you cannot access wp-admin, rename the plugins folder through SFTP/File Manager, or use a host file manager if that is the only access you have. This disables plugins without deleting them. Test again after the rename. If the site comes back, restore the folder name and isolate the faulty plugin from there.
When you need a careful rollback without making things worse, this is often a good time to use our WordPress fix guides or get a senior engineer to handle it directly.
5. Switch to a default theme
If plugins are not the cause, test the theme. Temporarily switch to a default WordPress theme such as Twenty Twenty-Four if the dashboard works. If the dashboard does not work, rename the active theme folder via SFTP so WordPress falls back to a default theme if one is installed.
A broken child theme, bad functions.php edit, or theme-specific plugin integration can all trigger a 500 error. If the site comes back after changing themes, the theme layer is the likely culprit.
6. Regenerate .htaccess
A corrupted .htaccess file can produce a 500 error, especially on Apache or LiteSpeed servers. To test this safely, rename the existing file to something like .htaccess-old. Then visit the site again.
If the error disappears, go to Settings > Permalinks in WordPress and click Save Changes to regenerate a clean .htaccess. If you are on Nginx, this specific file is usually not the cause, because Nginx does not use .htaccess in the same way.
7. Check the PHP error log or host error log
This is where you often find the real cause. Look for the most recent fatal error, parse error, memory exhaustion message, or permission denied entry. Host panels often show an “error log,” “PHP error log,” or “server logs” section. If you have SSH access, your host may also keep logs under /var/log or a site-specific log path.
You do not need to understand every line. You are looking for the first clear failure near the time of the 500 error. If you want a practical guide to reading those messages, see How to Read the WordPress Debug Log and Find the Real Cause.
8. Check PHP memory limit and resource limits
WordPress can throw 500 errors when PHP runs out of memory or hits another resource limit. This is more likely on heavier sites, WooCommerce stores, large page builders, import/export jobs, or hosts with conservative limits.
If your host allows it, increase the PHP memory limit in wp-config.php or via the hosting control panel. A common safe test is raising the WordPress memory limit to a sensible host-approved value, then retesting. If the site suddenly works, you have a capacity issue, not necessarily a broken plugin.
Remember that some hosts enforce hard caps, so a local change may not help if the server limit is the real bottleneck.
9. Verify file permissions and ownership
Incorrect permissions or ownership can break PHP execution and return a 500 error. As a general rule, WordPress directories are usually set more permissively than files, and executable scripts must be readable by the web server. Exact values can vary by host and setup, especially on managed hosting or containerized environments.
Do not randomly chmod everything to 777. That is unsafe and usually not the fix. If permissions are suspect, ask the host what they expect for your account type or let a professional verify them.
10. Look for a PHP version mismatch
A site can start failing after a PHP upgrade if a plugin or theme is not compatible with the new version. You may see 500 errors immediately or only on certain pages that call incompatible code.
If the problem started right after a PHP change, test by switching to the previous supported version in your hosting panel if that is available. If the site recovers, update or replace the incompatible code before switching PHP again.
11. Rule out security tooling or host-level rules
Sometimes the application is fine, but a firewall rule, malware scanner, WAF, or host security layer is blocking a request and causing a 500 on specific actions. This can happen after a plugin change, an unusual pattern of requests, or a false positive from a security tool.
If a page, form, or admin action fails while everything else works, check any security plugins, CDN rules, or host protection logs. This is especially important if you also suspect compromise. In that case, follow WordPress Site Hacked? Here's How to Clean It Up — Safely before trying more changes.
12. Use a clean isolation test if the cause is still unclear
If you have ruled out plugins, theme, .htaccess, PHP limits, and obvious log errors, the remaining cause is often environmental: host configuration, corrupted core files, database oddities, or a combination of small issues. At this point, a clean isolation test is better than guessing.
That usually means comparing the live site to a known-good backup, testing a fresh WordPress install on the same account, or cloning the site to a staging environment and reproducing the error there. Reproducibility is what turns an unknown 500 into a fixable defect.
What not to do
Do not keep refreshing and hoping it clears itself.
Do not change multiple things at once; you will lose the trail.
Do not delete plugins or themes before you know what they are doing.
Do not edit server files without a backup or a copy of the original.
Do not assume the latest plugin is always the cause, or always the victim.
How to prevent future 500 errors
Most repeated 500 errors come down to poor change control. The best prevention is boring but effective: keep reliable backups, test updates on staging when possible, update one thing at a time, and keep an eye on logs after changes. A stable maintenance routine beats emergency recovery every time.
It also helps to remove abandoned plugins, keep PHP and WordPress versions aligned with what your site actually uses, and document any custom code or server tweaks. If your site is business-critical, a managed maintenance plan can catch problems before they become outages. Mend’s Care Plan covers updates, backups, security, and uptime monitoring.
For a restore-focused approach to backups, read A Sensible WordPress Backup Strategy You Can Actually Use. For a broader maintenance workflow, How to Safely Update WordPress Plugins, Themes, and Core is also worth keeping handy.
When to call a professional
Call for help when the error comes back after you have checked plugins, theme, .htaccess, logs, PHP limits, and permissions; when the host cannot explain the failure; or when the site is paying customers or leads and every hour matters. If you are seeing repeated crashes, suspect malware, or do not have a safe backup to roll back to, this is no longer a simple DIY fix.
Mend’s senior engineers fix broken WordPress sites fast, usually the same day, using a backup-first workflow. You get a plain-English report of the root cause and exactly what changed, and every paid fix is backed by a fixed-or-your-money-back guarantee. If you want a hand without sharing passwords, use the free Mend Connect plugin and start with Emergency Rescue for urgent outages or Free Diagnosis if you want the problem triaged first.
In short: a WordPress 500 error is a signal, not a diagnosis. The safest way to solve it is to test the likely causes one by one, use logs to find the real failure, and stop when you hit a layer you cannot verify confidently.
### FAQ
**Q: Is a WordPress 500 error always caused by a plugin?**
A: No. Plugins are common, but 500 errors can also come from themes, .htaccess, PHP memory limits, file permissions, server rules, or hosting problems.
**Q: What is the first thing I should check?**
A: Check whether the error affects the whole site or only one page, then look at what changed most recently. That gives you the fastest path to the likely cause.
**Q: Can I fix a 500 error without wp-admin access?**
A: Yes. You can rename plugin or theme folders, test .htaccess, and check logs through SFTP or your host’s file manager. That is often enough to isolate the problem.
**Q: Why does the error come and go?**
A: Intermittent 500 errors often point to resource limits, a flaky plugin, a host-side rule, or an issue that only appears under certain requests. Logs are especially important in that case.
## A Sensible WordPress Backup Strategy You Can Actually Use
(https://wpmend.com/blog/sensible-wordpress-backup-strategy-restore-test)
Published 2026-09-06 · Maintenance
If you only do one thing for WordPress reliability, make it this: keep backups that are automatic, off-site, and actually restoreable. A backup you have never tested is a hope, not a recovery plan.
The safest strategy is simple: keep a recent full-site backup, keep enough history to roll back bad changes, and test a restore in a non-production environment before you ever need it. That turns backups from a checkbox into a real safety net.
What a good backup strategy is protecting you from
Most WordPress site owners think about backups after something goes wrong, but the common failure modes are predictable. A bad plugin update can break your layout. A theme edit can take down the front end. A hacked admin account can change content or inject spam. Hosting problems can corrupt files or the database. Even a routine migration can go sideways.
A sensible backup plan is not about collecting infinite copies. It is about making sure you can recover the site in a way that is fast, complete, and boring. If the restore process is unclear, untested, or depends on one person remembering a manual step, you do not have a real recovery plan yet.
The three parts of a backup plan most people miss
Good backups are more than a plugin ticking along in the dashboard. You need three things working together:
Coverage: files, database, and anything custom that matters to your site.
Separation: backups stored somewhere other than the same server as your live site.
Verification: a tested restore process, not just a “backup completed” message.
That last part is where many site owners get stuck. The backup exists, but no one knows whether it can be restored cleanly, how long it will take, or whether important parts of the site are missing.
What should be included in a WordPress backup?
For most sites, a complete backup needs both the file system and the database.
Files: WordPress core files, wp-content, themes, plugins, uploads, and any custom code.
Database: posts, pages, settings, users, menus, and plugin data stored in tables.
If you run an ecommerce site, membership site, learning platform, or any site with frequent transactions, think carefully about timing. A backup taken at 2 a.m. may not protect orders, signups, or form submissions that happen all day long. In those cases, shorter backup intervals matter more than having a huge archive.
A practical backup schedule for real sites
There is no universal schedule because traffic, publishing frequency, and business risk vary. Start with a schedule you can maintain, then adjust based on how often the site changes.
Site type
Suggested backup rhythm
What to keep
Simple brochure site
Daily database, weekly full-site
At least 2–4 weeks of history
Blog or content site
Daily full-site or daily database plus weekly full-site
2–8 weeks of history
Ecommerce or membership site
Frequent backups, often every few hours for the database
Enough history to cover a bad deploy or infection
Staging or development site
Before every major change
Short-term copies, not long-term archives
If your site changes often, a daily backup may not be enough. If it changes rarely, you still want automatic off-site backups so you are not relying on memory when something breaks.
Where backups should live
One of the most common mistakes is keeping backups on the same server as the live site. That may look convenient, but it does not protect you from the server failing, the disk filling up, or the account being compromised.
A safer setup stores backups in a separate location such as cloud storage, a remote backup service, or another off-site destination supported by your tools. If your host offers backups, use them as one layer, not the only layer. Host backups are useful, but they are still tied to the host’s systems and policies.
How to test a restore without risking your live site
Testing a restore should never mean experimenting on the production site first. Use staging or a separate temporary environment if you have it. If you do not, ask your host whether they can create a clone or sandbox. The goal is to confirm that the backup restores cleanly, the site loads, and key features still work.
Pick a recent backup. Choose one from a point in time you can recognize, such as before a plugin update or content change.
Create a safe test environment. Use staging, a subdomain, or a local development copy if possible.
Restore files and database together. Partial restores can make a site look “almost” fine while leaving hidden problems behind.
Check the front end. Load the homepage, a post, a page with a form, and any important templates or shop pages.
Check the admin area. Log in, view settings, and confirm menus, plugins, and users look right.
Test business-critical actions. Submit a form, add a product to cart, complete a test checkout if appropriate, or verify the membership flow.
Look for missing media or broken links. Images, documents, and uploads are where backup gaps often show up first.
If the restore works in staging but not in production, that usually points to environment differences: PHP version, database credentials, file permissions, caching layers, or a host-specific setting. That is exactly why restore testing matters. A passing restore on paper is not the same as a passing restore in practice.
What to verify after a restore
A restore is not finished when the site merely comes back online. You want to verify the parts that actually matter to your business.
Pages and posts load without errors.
Images and downloads display correctly.
Logins work for admin and any other roles you use.
Menus, widgets, and homepage sections appear as expected.
Forms send submissions to the right place.
Commerce, membership, or booking features still function.
Search and archive pages behave normally.
If you have caching, security, or performance plugins, clear or temporarily disable cache layers in the test environment so you are checking the actual restored site, not stale output.
Common backup mistakes that leave people stuck
Most backup problems are less about tools and more about assumptions. These are the big ones:
Only backing up the database: you lose themes, uploads, custom code, and plugins.
Only backing up files: you lose content, settings, users, and orders.
No off-site copy: the backup disappears with the server.
Never testing a restore: the first test happens during an emergency.
Keeping too few versions: you may back up a problem after it has already spread.
Assuming host backups are enough: they may not align with your recovery needs.
How to make backups easier to trust
The best backup plan is the one you can keep doing. Keep it simple enough that it survives busy weeks and team changes. Document where backups are stored, how often they run, and how to restore them. If only one person knows the process, the process is fragile.
For many site owners, the right setup is a backup plugin or host backup system plus a monthly restore test. If you make significant changes often, test more often. After major plugin, theme, or core updates, it is worth confirming that your backup still restores cleanly and that the site works from the restored copy.
For step-by-step help with safe updates, this guide pairs well with your backup routine: WordPress Site Broke After an Update? Here's What Happened and How to Fix It. If you want to understand the restore process from the backup side, also read The Smart WordPress Backup Plan and Restore Test.
When to call a professional
If your site is already broken, if the backup is incomplete, or if you are not sure how to restore without making things worse, stop and get help before experimenting on live data. The same is true if you run a store, membership site, or high-traffic business site and cannot afford a failed restore.
Mend can help if you need a safe backup review, a working restore, or a fast recovery after a bad update, host issue, or hack. A free diagnosis will triage the problem and quote a flat price before any work starts, and every paid fix is backed by a fixed-or-your-money-back guarantee. If you want a senior engineer to handle it on a backup-first workflow, start here: /start/diagnosis. If you already know the site is in trouble and need urgent help, use /start/emergency.
If you want ongoing peace of mind instead of a one-time rescue, a Care Plan can cover managed updates, backups, security, and uptime monitoring.
Backups are one of the few WordPress tasks that only feel boring when they are working. The right plan is not complicated: automatic, off-site, enough history, and a restore test you can repeat. Once you have that, you are not hoping your site can recover — you know it can.
### FAQ
**Q: How many WordPress backups should I keep?**
A: Keep enough versions to recover from a bad update, a hacked file, or a mistake you do not notice right away. For many sites, at least 2 to 4 weeks of history is a good starting point.
**Q: Is my host’s backup system enough?**
A: Sometimes it is useful, but it should not be your only copy. Host backups can fail, be limited, or be harder to restore than you expect, so keep an independent off-site backup too.
**Q: What is the safest way to test a restore?**
A: Use staging, a clone, or a local test environment instead of the live site. Restore both files and database, then check pages, admin access, forms, and any business-critical functions.
**Q: Do I need to back up WordPress files and the database?**
A: Yes. The files contain WordPress core, themes, plugins, and uploads, while the database contains your content, settings, users, and much of your site’s configuration.
## WordPress Spam Injection Cleanup: Find Hidden Malware Fast
(https://wpmend.com/blog/wordpress-spam-injection-cleanup-hidden-malware)
Published 2026-09-05 · Security
If your WordPress site suddenly shows strange links, Japanese text, pharma spam, or hacked snippets in search results, you may be dealing with a spam injection or hidden malware. The safest approach is to isolate the damage first, back up the site, then remove the infected files, database entries, and backdoor access that let the attacker return.
This guide focuses on the less obvious signs of infection: code injected into theme files, database content, widgets, header/footer scripts, and SEO spam that only appears to search engines or logged-out visitors. If you need a broader cleanup path, start with our in-depth guide to WordPress site hacked cleanup.
What spam injection usually looks like
Spam injections are often easier to miss than a full takeover. The site may still load normally for you while infected content is hidden from search engines, mobile users, or visitors from certain countries. That’s why many owners only notice the problem after a drop in traffic, a Search Console warning, or a customer saying a page looks wrong.
Common symptoms include:
Random spammy text inside posts, pages, widgets, or product descriptions
Foreign-language content or keyword-stuffed links appearing in source code
Unexpected redirects, especially on mobile or when coming from Google
New admin users, unfamiliar plugin files, or recently modified theme files
Spam pages indexed by search engines that you never published
Injected scripts in the header, footer, or database that keep reappearing after deletion
One important clue: if the visible page looks normal but the page source contains spam, you are likely dealing with an injection rather than simple content corruption.
Why these infections keep coming back
Deleting the visible spam is not enough if the attacker still has a foothold. In WordPress, reinfection usually happens because the original entry point remains open. That could be an outdated plugin, a stolen admin password, a vulnerable file upload form, a malicious cron job, or a backdoor hidden in a writable folder.
Another common issue is that the infection is stored in more than one place. Attackers often plant the same payload in a theme file, a database option, and a custom plugin so that removing only one copy does not fully solve the problem. That is why a careful cleanup always checks files, the database, and user accounts together.
Step 1: Put the site into a safe state
Before changing anything, make a full backup of files and the database. If possible, take the backup from your hosting panel or a trusted backup tool, then store a copy offline. If you are dealing with active redirects or card-skimming code, consider putting the site into maintenance mode or temporarily restricting access while you investigate.
Do not start by deleting random files. It is easy to remove the wrong thing and make the site harder to recover. A backup-first workflow gives you a fallback if you remove a file the theme or a plugin still needs.
Step 2: Find the obvious infection points
Start with the places attackers use most often:
Theme files such as header.php, footer.php, functions.php, and any template parts
Plugin files, especially in plugins you do not recognize or have not updated recently
Uploads folder, where PHP files should usually not live
WordPress core files, which should match the official version from WordPress.org
Database content such as options, widgets, custom HTML blocks, and post content
If your host provides file manager timestamps, look for files modified recently but outside your normal update schedule. A new file in wp-content/uploads with a .php extension is especially suspicious.
Fast file checks
Search for common malware markers like obfuscated code, long unreadable strings, or suspicious functions that decode and execute content. These functions are not always malicious by themselves, but they deserve a careful review when they appear inside theme or plugin code:
base64_decode
eval
gzinflate
str_rot13
preg_replace with /e
assert
shell_exec
system
passthru
curl_exec
Also inspect files for strange include statements pointing to remote URLs or unfamiliar local paths. Attackers frequently hide payloads inside seemingly harmless PHP comments or after legitimate code.
Step 3: Check the database, not just the files
Spam injections often live in the database because they are harder to spot and survive many file-level cleanups. Check wp_options for suspicious scripts, malformed URLs, or unexpected home/siteurl values. Then review recent posts, widgets, custom fields, and any page builder content for hidden blocks of code.
Search for telltale patterns such as:
Spam links wrapped in ordinary text
Script tags added to content fields
Invisible text using CSS or HTML tricks
Unfamiliar iframes or encoded blobs
If you are comfortable with database tools, search for unusual keywords related to the spam you are seeing. For example, if Google is showing fake pharmacy pages, search for that term across posts, options, and custom tables.
Step 4: Verify user accounts and scheduled tasks
Attackers often create a second way back in before they leave. Review all admin users and remove anything you do not recognize. Change every administrator password, the hosting panel password, the SFTP/SSH password if used, and the WordPress salts in wp-config.php.
Then check for scheduled events and cron jobs. A malicious cron task can reinject spam every few minutes even after you clean visible files. If your host has a cron manager, look for unfamiliar commands, especially ones that call PHP files from uploads or temporary directories.
Step 5: Clean the infected content safely
Once you have identified likely infection points, replace compromised theme and plugin files with clean copies from trusted sources. For WordPress core, reinstall the matching core version from a clean package rather than editing individual files. For themes and plugins, reinstall from the original vendor if you know the copy is legitimate.
For database content, remove only the malicious fragments, not the whole record. If a post contains both valid content and an injected spam block, delete the injected part and then test the page. If a widget or option contains malicious code, clear the payload and save the setting again.
After each cleanup step, clear all caches: plugin cache, host cache, CDN cache, and browser cache. Otherwise you may think the infection remains when you are just seeing stale output.
Step 6: Hunt the backdoor before calling it done
A site can look clean and still be vulnerable if the backdoor remains. Search for recently changed PHP files, odd file names that mimic core files, and tiny loaders in unexpected places. Look in wp-content/uploads, wp-includes overrides, mu-plugins, and any custom directories added by a developer or prior contractor.
If you find code that seems to download content from a remote server, create admin users, hide files, or write to other locations, treat it as a backdoor. Remove it and then investigate how it got there. That root cause matters, because if you only clean the symptom, the next bot scan can reinfect the site.
How to tell if the cleanup worked
Test the site in a private browser window, on mobile, and from a different network if possible. View the page source and confirm the spam is gone. Check Search Console, your analytics landing pages, and site: searches in Google for strange indexed URLs.
Then watch the site for at least a few days. Reinfection usually shows up quickly if an entry point was missed. If the spam returns, the problem is not the visible content; it is an unresolved access path or hidden backdoor.
How to prevent this from happening again
The best prevention is boring but effective: keep WordPress, themes, and plugins updated, remove unused extensions, use unique strong passwords, and limit admin accounts to the people who truly need them. If you run a high-value site, add a care process that includes backups, update testing, and uptime/security monitoring.
Also harden file access. Remove PHP execution from uploads where your host allows it, keep wp-config.php protected, and avoid leaving writable directories open to everyone. If you want a practical maintenance routine, our guide to safely updating WordPress plugins, themes, and core pairs well with a cleanup workflow.
Good backups matter too, but only if they are restorable. A verified backup plan helps you recover faster if cleanup goes wrong or if you need to roll back to a known-clean point. See our backup plan and restore test guide for that process.
When to call a professional
If you see repeated reinfection, unfamiliar admin accounts, hidden redirects, or spam that keeps coming back after you delete it, bring in a specialist. At that point the issue is usually larger than a single bad file, and a rushed cleanup can make recovery slower.
Mend’s engineers handle backup-first malware cleanup, reinfection hunting, and the hard part most site owners do not have time to do: finding the root cause and proving the site is clean. If you want a fast triage first, start with free diagnosis; if the site is actively compromised, use Emergency Rescue. You can also connect securely with the free Mend Connect plugin instead of sharing passwords.
If your site is business-critical and you want someone to fix it now, not next week, Mend is built for that. Most fixes are completed the same day, and every paid fix includes a plain-English report of what was found and what changed.
Bottom line: spam injections are rarely just “one bad snippet.” Treat them like a security incident, not a cosmetic issue, and clean files, database, users, and scheduled tasks together.
### FAQ
**Q: How can I tell the difference between spam injection and a broken plugin?**
A: If the spam appears in page source, search results, or only for certain visitors, it is more likely an injection. A broken plugin usually causes a functional error rather than hidden keyword stuffing or strange links.
**Q: Should I delete infected files or replace them?**
A: Replace them with clean copies whenever possible. Deleting alone can break the site and does not help if the attacker left a backdoor somewhere else.
**Q: Can security plugins clean malware completely?**
A: They can help detect suspicious files, but they do not always find database injections or custom backdoors. For a real cleanup, you still need to check files, the database, users, and cron jobs.
**Q: What if the spam comes back after cleanup?**
A: That usually means the original entry point is still open. Recheck vulnerable plugins, admin accounts, scheduled tasks, and writable directories, or get a professional to trace the reinfection path.
## How to Read the WordPress Debug Log and Find the Real Cause
(https://wpmend.com/blog/read-wordpress-debug-log-find-real-cause)
Published 2026-09-04 · Maintenance
If WordPress is throwing vague errors, the debug log is often the fastest way to find the real cause. The trick is not just turning it on, but reading the log in a way that separates harmless notices from the one line that actually points to the broken plugin, theme file, or PHP problem.
Start with a backup, then enable logging on a staging site or during a low-traffic window if you must do it on production. The goal is to capture the exact error message, the file path, and the line number, then use those clues to narrow the fix safely.
What the WordPress debug log is actually telling you
WordPress can write technical messages to a log file when something goes wrong. That file usually lives at wp-content/debug.log if logging is enabled in wp-config.php.
It is easy to misunderstand the log because it often contains a mix of warnings, notices, and fatal errors. Not every line means your site is broken.
The kinds of messages you will usually see
Notices: Code found something odd, but the site may still work.
Warnings: Something is off and may affect behavior, but it is not always the root cause.
Fatal errors: A crash point. These are the most important lines when a page goes blank or breaks.
Deprecated messages: A plugin or theme is using older code that still works for now, but may break on newer PHP or WordPress versions.
If you are trying to solve a visible site issue, focus first on fatal errors and repeated warnings that match the symptom. For example, a front-end crash with a log line referencing a specific plugin file is much more useful than a stream of notices from unrelated code.
How to safely turn on debugging
Before editing anything, back up your site files and database. If possible, test changes on staging first.
Open wp-config.php in your site root.
Find the line that says /* That's all, stop editing! Happy publishing. */
Add or update these constants above that line:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
This setup tells WordPress to write errors to a log file without showing them to visitors. That is usually the safest approach on a live site. Behavior can vary slightly by host, but this is the standard WordPress pattern.
After saving, reproduce the problem once so the log has fresh entries. Then check wp-content/debug.log. If the file does not appear, your host may handle logging differently or file permissions may be blocking it.
How to read the log without getting lost
The fastest way is to work backward from the symptom. If a page fails after you click “Add to Cart,” look at the newest log entries around that time, not the whole file.
A useful log line often includes these parts:
The date and time of the event
The error type
The plugin, theme, or core file involved
A file path and line number
Sometimes a stack trace showing what called what
For example, a line might mention a specific plugin file and a line number where a function failed. That does not always mean the file is bad by itself, but it tells you where to inspect next.
What matters most in a log line
Repeated file names: If the same plugin or theme appears over and over, that is a strong clue.
Exact error text: “Uncaught Error,” “Call to undefined function,” and “Allowed memory size exhausted” all point to different fixes.
Location: A file in a plugin folder suggests plugin code; a theme path suggests theme code; a core file can suggest an environment issue or corrupted install.
Timing: Match the timestamp to the moment you triggered the error.
If you want a broader background on why updates often trigger these failures, see WordPress Site Broke After an Update? Here's What Happened and How to Fix It. If the log suggests a malformed plugin or suspicious file, the safest next step is to compare it with our guide on cleaning up a hacked WordPress site safely.
How to tell the difference between noise and the real problem
This is where most people get stuck. WordPress logs can be noisy, and a dozen harmless warnings can hide the one line that actually matters.
Use this filter:
Ignore isolated notices unless they line up with the exact symptom you are troubleshooting.
Prioritize fatal errors because they often explain blank pages, crashes, or the “critical error” message.
Look for repetition. One odd notice is often harmless; the same error repeating after each page load is more likely the cause.
Pay attention to the first fatal event after the problem starts. Later errors may just be fallout.
Another useful clue is whether the error is coming from a plugin or theme you recently changed. If the log points to a file inside a custom theme or an extension that was updated recently, that is often the place to test first.
Common log patterns and what they usually mean
You do not need to memorize every PHP message. You just need to recognize the patterns that most often lead to action.
Log pattern
What it often means
What to check next
Call to undefined function
A plugin/theme is calling code that is not loaded or not available
Recent updates, missing dependencies, conflicting code
Allowed memory size exhausted
PHP ran out of memory while processing a request
Heavy plugin, image processing, low memory limit, host limits
Uncaught Error
An unhandled PHP error stopped execution
Exact file and line number, recent changes, compatibility
Deprecated
Old code is being used; may break in future PHP versions
Plugin/theme updates, PHP version compatibility
Permission denied
WordPress or PHP cannot read or write a file
File ownership, permissions, host configuration
If the log points to PHP compatibility problems, our guide on how to fix WordPress errors after a PHP upgrade can help you identify what changed and why it broke. If you need a quicker triage path, you can also start with free diagnosis and have a senior engineer interpret the log for you before any paid work begins.
A practical workflow for finding the real cause
When you are under pressure, use a repeatable process instead of guessing.
Back up the site.
Reproduce the problem once so the log captures it fresh.
Open the newest log entries and search for the exact time of the failure.
Identify the first fatal error or the most relevant warning.
Note the file path to determine whether the issue is in a plugin, theme, or core file.
Check whether the problem matches recent changes, like an update, new plugin, PHP change, or host migration.
Test one safe fix at a time, such as disabling the suspected plugin on staging or switching to a default theme.
If you do not have staging, avoid making multiple changes at once. If the log implicates a plugin, disable that plugin first. If it implicates the theme, switch temporarily to a default WordPress theme. If it implicates a core file, stop and investigate before replacing files blindly.
When the debug log is not enough
Sometimes the log gives a clue, but not the complete answer. That happens when the real problem is outside WordPress itself, such as a server limit, file permissions, missing extension, corrupted cache, or a host-level rule.
You are likely beyond DIY if:
The same fatal error returns after you disable the suspected plugin or theme
The log points to multiple unrelated files, making the issue hard to isolate
You see database connection failures, memory exhaustion, or permission errors with no obvious site-side fix
The site is customer-facing and every minute matters
You are not comfortable editing configuration files or testing code changes
That is the point where a professional can save time and reduce risk. Mend fixes broken WordPress sites on a backup-first workflow, usually the same day, and every paid fix includes a plain-English report explaining the root cause and exactly what changed. If you want a fast handoff, start at Emergency Rescue or submit a free diagnosis to get a flat quote before any work begins.
If you prefer to avoid repeated break-fix cycles altogether, the Care Plan covers managed updates, backups, security, and uptime monitoring so these problems are less likely to surprise you later.
How to prevent future log-chasing
The best debug log is one you do not need often. You can reduce emergencies by keeping your site easy to inspect and easy to restore.
Keep regular backups and test restores, not just backups on paper.
Update plugins, themes, and WordPress itself carefully and one change at a time.
Remove plugins you are not actively using.
Document which plugin or theme was changed before a problem started.
Keep a note of your PHP version and hosting environment so compatibility changes are easier to spot.
Turn off debug logging again after you finish troubleshooting on a live site.
If you want a safer update process, our guide on how to safely update WordPress plugins, themes, and core pairs well with log-based troubleshooting. For deeper cleanup and prevention, the smart WordPress backup plan and restore test is worth reading too.
Final takeaway
The WordPress debug log is most useful when you treat it like evidence, not like a wall of text. Look for the first fatal error, match it to the time of the problem, and use the file path and line number to identify the code that actually needs attention.
If the log still leaves you stuck, that is normal. A senior engineer can usually turn the same clues into a fix much faster than trial and error, especially when the site is live and risky to touch. If you want that help without sharing passwords, connect your site securely and let Mend inspect the issue from there.
### FAQ
**Q: Where is the WordPress debug log file?**
A: If logging is enabled in wp-config.php, WordPress usually writes to wp-content/debug.log. Some hosts handle logging differently, so the file location can vary.
**Q: Should I leave WP_DEBUG on all the time?**
A: Not on a live site unless you have a specific reason. Debug output can expose technical details and create extra noise, so turn it off after troubleshooting.
**Q: What is the difference between a notice and a fatal error?**
A: A notice is often informational and may not affect the site. A fatal error stops execution and is much more likely to explain a broken page or crash.
**Q: The log shows a plugin file, but I am not sure it is the real cause. What now?**
A: A plugin file in the log is a strong clue, but not always the only cause. Disable that plugin on staging or during a safe window, then retest and see whether the error disappears.
## WordPress Brute-Force Attacks: Stop Bot Login Spam
(https://wpmend.com/blog/wordpress-brute-force-attacks-stop-bot-login-spam)
Published 2026-09-03 · Security
If bots are hammering your WordPress login page, the fastest safe fix is to block repeated attempts at the edge, add layered login protection, and confirm your admin accounts are still secure. Don’t just hide the login page and hope for the best; stop the attack patterns first, then harden the site so the same traffic doesn’t come back through another door.
Brute-force login attacks usually look noisy rather than subtle: dozens or thousands of failed logins, alerts from your host, a slow admin area, or security plugin notifications about repeated authentication failures. On some sites, the attack is mostly background noise. On others, it causes real problems such as CPU spikes, database strain from failed sessions, lockouts for real users, or a compromised account if a weak password gets guessed.
This article focuses on a fresh, practical angle: what to do when bot login spam is the problem and you need to reduce it quickly without locking yourself out or breaking legitimate logins. If you also suspect the site has already been compromised, stop here and read WordPress Site Hacked? Here's How to Clean It Up — Safely first.
What brute-force login attacks actually do
A brute-force attack is a high-volume guessing game. Bots repeatedly try username and password combinations against wp-login.php, XML-RPC endpoints, or other auth surfaces. Most attempts fail, but the traffic still costs something: server resources, log noise, and sometimes account lockouts or suspicious password reset activity.
WordPress itself is not “broken” by these attacks, but the surrounding environment can be stressed. Shared hosting often shows this first because CPU and entry-process limits are lower. Managed hosts may absorb the traffic better, but you’ll still want to reduce it.
Signs the attack is real, not just normal traffic
Repeated failed login alerts from your host or security plugin
Dozens of attempts from the same IPs or many rotating IPs
Slow admin logins or intermittent lockouts
Unexpected password reset requests
XML-RPC login attempts in logs, even when no one is using Jetpack or remote publishing
New user accounts, changed email addresses, or admin role changes you did not make
If you see unauthorized changes, treat it as a possible compromise, not just an attack. Brute force often leads to takeover when a weak password, reused password, or stale admin account is available.
The safest way to stop it
Before changing anything, back up the site. If your host provides one-click backups, use it. If not, create a fresh backup through your backup tool or host panel. Security changes are usually safe, but it is still wise to have a restore point before you tighten access.
1) Confirm the attack surface
Check whether the login traffic is hitting /wp-login.php, /wp-admin, XML-RPC, or a custom login URL from a plugin. This matters because different protections work better at different layers. Your host logs, security plugin logs, or a web application firewall dashboard can help.
If the attacker is using XML-RPC, you may not need to disable it entirely. Some sites still use it legitimately through Jetpack, the WordPress mobile app, or remote publishing tools. Disable it only if you know you do not need it.
2) Put rate limiting in front of the site
The most effective fix is to stop bad requests before WordPress has to process them. A firewall, CDN security layer, or host-level rate limiting can block repeated login attempts by IP, country, or request pattern. This is usually better than only relying on a WordPress plugin, because it reduces load before PHP and MySQL are involved.
If your host offers login protection or brute-force mitigation, turn it on. If you use a CDN or WAF, add a rule for excessive requests to login endpoints. If you use a security plugin, enable its brute-force protection, but do not assume it is enough on its own for a busy attack.
3) Add login throttling and two-factor authentication
Two-factor authentication is one of the best defenses for WordPress admin accounts because a guessed password still won’t be enough. Enable it for every user who can edit content, install plugins, or access critical settings. For sites with multiple editors, this is often the best long-term control after rate limiting.
Login throttling is also useful. It temporarily delays or blocks repeated failures from the same IP or account. Set it conservatively so real users are not punished for a typo. If you are unsure, start with gentler limits and monitor the results for a day or two.
4) Remove weak or unused admin accounts
Attackers look for old accounts, shared admin usernames, and users with predictable roles. Go to Users and review every account. Delete accounts that are no longer needed, downgrade anyone who does not require admin access, and make sure no one is still using admin or another obvious username.
Also check for stale staging users that were copied to production. Those accounts are easy to forget and often retain elevated privileges longer than they should.
5) Reset passwords for all privileged users
If the attack has been going on for a while, change passwords for every admin and editor account, not just one. Use long, unique passwords stored in a password manager. If the same password was reused elsewhere, change it there too.
Do not send passwords by email or chat. WordPress passwords should be reset through the built-in process or directly by the account owner. If you are locked out during this process, the guide Locked Out of WordPress Admin: Why It Happens and How to Fix It can help.
6) Harden the login page carefully
Some owners try to “hide” wp-login.php with a plugin. That can reduce noise, but it is not a complete defense. It can also create support headaches if the plugin breaks, caches the login page incorrectly, or interferes with password resets.
If you do rename or move the login URL, document it clearly and test recovery steps before relying on it. Make sure you know how to disable the plugin from the file system if you get locked out. Hiding the login page is best treated as an extra layer, not the primary fix.
7) Protect XML-RPC only if you can afford to
XML-RPC is a common brute-force target because it can accept many login attempts in a single request. If your site does not need it, block it at the server or firewall level. If you do need it, restrict it with a WAF or security plugin rather than disabling it blindly.
Site behavior here is host-dependent. Some managed hosts already throttle XML-RPC aggressively; others do not. Test legitimate features after any change.
8) Check whether bots are bypassing the login form
Some attacks do not hit the visible login page at all. They try REST API auth flows, XML-RPC methods, or even password reset forms. Review logs for patterns, not just page views. If you only block one endpoint, the bot may move to the next one.
A good security setup watches all auth-related surfaces, not just wp-login.php.
What not to do
Do not install three different security plugins that all try to block logins in different ways
Do not block all anonymous traffic to the whole site unless you are running a private site
Do not disable password resets unless you have another recovery process
Do not assume changing the login URL alone has “fixed” the problem
Do not ignore the attack if account alerts keep appearing
The goal is to reduce attack volume and protect accounts without breaking normal use. A heavy-handed fix can leave you with the same security problem plus a support problem.
How to tell if the site has already been breached
Brute-force attacks are sometimes just noise, but they are also a common path to compromise. Look for signs such as new admin users, strange plugin installations, changed site URLs, injected links, altered homepage content, or outbound spam. If you see any of that, take a full incident response approach rather than only tightening login protection.
If you want a safe walkthrough for that situation, start with WordPress Site Hacked? Here's How to Clean It Up — Safely. If you are not sure whether the issue is just attacks or a deeper infection, the safest next step is a triage review through free diagnosis.
How to prevent brute-force attacks from becoming a repeat problem
Prevention is mostly about layered controls and basic account hygiene. Use unique passwords, enable two-factor authentication, keep admin access limited to the people who truly need it, and make sure your host or firewall is filtering abusive traffic before it reaches WordPress.
Regular updates matter too. Security plugins, themes, and WordPress core are not a substitute for login protection, but outdated code can make recovery harder if something goes wrong. For a safe update process, see How to Safely Update WordPress Plugins, Themes, and Core.
Finally, test your backup and recovery plan. If a security change locks out the wrong user or a host rule blocks a legitimate workflow, you need a quick rollback path. A restore test is worth doing before you are under pressure, not after.
When to call a professional
Bring in a WordPress engineer if the attack is causing downtime, if you cannot tell whether the site is compromised, if your host is rate-limiting legitimate visitors, or if login protections are locking out real users. It is also worth getting help if you need to protect a business site quickly and do not have time to test every change.
Mend can usually handle this fast with a backup-first workflow, a plain-English root-cause report, and flat upfront pricing. If you want a senior engineer to inspect the login surface, harden the site safely, and confirm whether the attack is just brute force or something worse, start with free diagnosis. For urgent sites, Emergency Rescue is the fastest path.
If you want ongoing protection after the immediate problem is fixed, a managed plan with updates, backups, security monitoring, and uptime monitoring can keep the same issue from coming back. You can review that at Care Plan.
Bottom line: stop brute-force attacks at the edge, secure every admin account, add two-factor authentication, and verify the site is not already compromised. That combination fixes the problem safely without turning your login page into a maintenance project.
### FAQ
**Q: Should I block wp-login.php entirely?**
A: Usually no. Blocking it outright can break legitimate logins, password resets, and admin workflows. It is better to rate-limit and protect it, then add extra layers like two-factor authentication.
**Q: Is hiding the WordPress login page enough?**
A: No. It may reduce random bot noise, but attackers can still find other auth endpoints or discover the new URL. Treat it as a minor layer, not the main defense.
**Q: Can brute-force attacks slow down my site?**
A: Yes, especially on shared hosting or lower-capacity servers. Even failed logins still consume resources, and repeated attempts can create noticeable load or lockouts.
**Q: How do I know if this is brute force or malware?**
A: Brute force usually shows repeated failed logins with no site changes. If you see unknown admins, injected content, or altered settings, assume the site may be compromised and investigate as a security incident.
## The Smart WordPress Backup Plan and Restore Test
(https://wpmend.com/blog/smart-wordpress-backup-plan-restore-test)
Published 2026-09-02 · Maintenance
If you want a backup strategy that actually protects your WordPress site, don’t focus on how many backups you have. Focus on whether you can restore one quickly, safely, and to the right place when something breaks.
The best plan is simple: keep a recent off-site backup, keep at least one separate copy before risky changes, and test a restore before you ever need it in an emergency.
What a sensible WordPress backup strategy looks like
A good backup strategy is not “set it and forget it.” It is a small system with three jobs:
capture the files and database that make your site work,
store copies somewhere other than the server your site runs on,
prove that those copies can be restored.
That last part is where many site owners get burned. A backup that cannot be restored is just a comforting file sitting on a disk.
What to back up, exactly
For most WordPress sites, you need both the database and the files.
Database: posts, pages, users, settings, WooCommerce orders, form submissions, and most site content.
Files: wp-content uploads, themes, plugins, and any custom code or media stored on the server.
If your site has custom server configuration, special uploads outside the normal WordPress folders, or a heavily customized theme, include those too. Host setups vary, so check what your stack actually stores on disk versus in the database.
The backup schedule that works for real sites
The right schedule depends on how often your content changes. A news site, shop, or membership site needs a much tighter backup cadence than a brochure site that changes once a month.
Site type
Database backup
File backup
Why
Static brochure site
Daily or before changes
Weekly and before updates
Most risk comes from updates and rare edits
Blog or content site
Daily
Daily or weekly
New posts and settings change more often
WooCommerce or membership site
Hourly or near-real-time if possible
Daily plus before changes
Orders, accounts, and sales data change constantly
For many owners, the most practical pattern is: automatic daily backups, plus a manual backup immediately before updating plugins, themes, core, or PHP. If you’re preparing to update and want the safest process, see How to Safely Update WordPress Plugins, Themes, and Core.
Where backups should live
Do not rely only on backups stored on the same hosting account as the site. If the server has a disk failure, account compromise, or cleanup issue, local backups can disappear with everything else.
A sensible setup keeps copies in at least two places:
Primary backup location: your backup plugin, host backup system, or managed backup service
Secondary off-site copy: cloud storage or another location you control
The goal is resilience. If one copy is unavailable, corrupted, or deleted, you still have a path back.
The restore test most people skip
Testing a restore does not mean clicking “restore” on your live site and hoping for the best. Test in a safe environment first: a staging site, local copy, or a temporary test site provided by your host if available.
Here is the simplest reliable test:
Back up the site first. Never test a restore without a fresh backup in hand.
Create a staging copy or local copy. Keep it separate from production.
Restore the backup there. Use the same backup source you would trust in an emergency.
Check the front end. Open a few pages, images, forms, and key templates.
Check the admin area. Confirm you can log in and see expected settings.
Verify dynamic data. For stores, confirm products, carts, and orders; for membership sites, check accounts and access rules.
Look for missing media or broken links. These are common signs that the backup was partial or the restore missed files.
If the restore works only partly, treat it as a failed restore. A backup that brings back pages but not uploads, orders, or settings is not good enough.
Common restore problems and what they usually mean
When a restore test fails, the issue is often one of a few predictable problems:
Database restored, files missing: images, themes, or plugins are absent because the file backup was incomplete.
Files restored, database missing or stale: content, settings, or recent orders are gone because the database snapshot was outdated.
Wrong URLs after restore: the backup was restored to a different domain or path and needs search-and-replace or configuration updates.
Serialization or compatibility errors: the restore tool or backup format did not handle the site cleanly.
Site works but admin is broken: a plugin, cache, or environment mismatch is interfering after the restore.
If a restore brings back a broken site, the problem is not necessarily the backup itself. Sometimes the restore was technically successful, but the target environment, URLs, or plugin state needs cleanup. If your site is already broken after a change, the guide WordPress Site Broke After an Update? Here's What Happened and How to Fix It may help you narrow down the cause.
How to build a backup workflow you’ll actually keep using
The best backup system is the one you will keep. Make it boring, repeatable, and tied to the moments when risk is highest.
Automatic regular backups: daily for most sites, more often for stores or membership sites
Pre-change backups: before plugin updates, theme changes, core updates, PHP upgrades, and major content work
Off-site storage: at least one backup copy somewhere independent of your host
Restore tests: quarterly for low-risk sites, monthly for sites that change often
Rotation: keep multiple restore points, not just the latest copy
A practical rule: keep enough history to recover from a problem you do not notice immediately. If malware, a bad automation, or a broken integration damages the site slowly, yesterday’s backup may already be too new. If security is part of the problem, read WordPress Site Hacked? Here's How to Clean It Up — Safely.
What not to do
Backup mistakes are usually simple, and they are common:
keeping backups only on the same server as the live site,
assuming your host’s backups are enough without knowing the retention policy,
never testing a restore,
only backing up the database or only backing up files,
storing one backup and overwriting it forever,
restoring directly to production as a “test.”
Always back up before making risky changes. If you are experimenting, use staging whenever possible. If you do not have staging, be extra conservative and keep the rollback path clear.
How often to test restores
You do not need to test every single backup, but you do need evidence that your backup process works. A good rhythm is:
After setup: test your first backup immediately
After major site changes: test again if the structure, plugins, or hosting changed
Quarterly: for stable sites
Monthly: for stores, membership sites, or sites with frequent edits
The important thing is consistency. A restore test that fails is useful because it shows you the truth before an emergency does.
When to call a professional
If your backup system is failing, incomplete, or confusing, do not wait until the site is down to sort it out. You should call a professional if your restores fail, your host backup is unclear, your site has custom code or complex data, or you need to recover a live store without losing orders or logins.
That is exactly the kind of problem Mend handles every day. Our senior engineers work backup-first, fix sites fast, and send you a plain-English report of what changed. If you need a clean recovery path without gambling on the process, start with free diagnosis, or if the site is already down and urgent, go straight to Emergency Rescue. If you want a secure handoff, you can connect the site through Mend Connect without sharing passwords.
If you want ongoing protection instead of one-off panic fixes, a managed plan can be the simpler option. Mend’s Care Plan covers updates, backups, security, and uptime monitoring so backup testing does not fall off your to-do list.
A simple backup strategy you can implement today
If you want the shortest path to a safer setup, use this:
Turn on automatic backups.
Store at least one copy off-site.
Make a fresh backup before every risky change.
Test a restore in staging or locally.
Repeat the test on a schedule.
That is the difference between “I hope we can recover” and “I know we can.”
### FAQ
**Q: Is a host backup enough for WordPress?**
A: Sometimes it is a good layer, but it should not be your only layer. Host backups can be limited by retention, frequency, or access, so keep an independent off-site copy too.
**Q: What is the safest way to test a WordPress restore?**
A: Restore the backup in staging or a local copy, not on the live site. Then check the front end, admin, media, and any dynamic features like forms or orders.
**Q: Should I back up files and database separately?**
A: Yes. WordPress content and settings live in the database, while themes, plugins, uploads, and custom code live in files. You need both for a complete recovery.
**Q: How often should I test my backups?**
A: Test immediately after setting up backups, then on a regular schedule. Monthly is sensible for high-change sites, and quarterly is usually enough for low-change sites.
## How Plugins Really Slow Down WordPress (And How to Audit Them)
(https://wpmend.com/blog/how-plugins-slow-down-wordpress)
Published 2026-08-31 · Performance
Plugins slow down WordPress not strictly because of their quantity, but because of how they execute PHP code, query the database, load front-end assets, and run background requests. A single poorly coded plugin can add seconds to your server response time (TTFB), while fifty lightweight, highly optimized plugins might have a negligible impact on performance. To fix plugin-induced slowdowns, you must measure what each plugin executes on the server and loads in the browser rather than arbitrarily deleting essential features.
The Myth of the "Magic Plugin Limit"
One of the most persistent myths in the WordPress ecosystem is that having more than 15 or 20 plugins automatically makes a website slow. Site owners often spend hours deactivating minor utility plugins—like XML sitemap generators or simple redirect handlers—while leaving heavy page builders or unoptimized analytics plugins untouched.
WordPress loads enabled plugins on every request. However, five lines of clean code in a single-purpose plugin consume virtually zero CPU time and memory. Conversely, a feature-heavy plugin that runs complex database queries, connects to external APIs, and loads unminified scripts across every page can cripple your web server. When diagnosing speed issues, the structural behavior of the plugin matters far more than your total plugin count.
The 5 Technical Ways Plugins Degrade Site Speed
To fix performance bottlenecks, it helps to understand how inefficient plugins consume server and browser resources. Here are the five main mechanisms that degrade site speed:
1. Front-End Asset Bloat (CSS & JavaScript Overhead)
Many plugins load their styles and JavaScript files on every single page of your website, regardless of whether the plugin's feature is actually present on that page. For instance, a contact form plugin might enqueue scripts and stylesheets on your blog posts, homepage, and archive pages—even if the form only lives on your contact page. This extra weight increases page size, creates render-blocking resources, and hurts your overall user experience.
2. Autoloaded Database Options
WordPress uses the wp_options database table to store site settings, plugin configurations, and temporary data (transients). Plugins often mark their settings to "autoload," meaning WordPress retrieves that data into server memory on every single page load. When plugins store massive arrays, tracking logs, or uncleaned transient data in autoloaded options, memory usage spikes, and server processing slows down across the entire site.
3. Unindexed or Excessive Database Queries
Every time a visitor opens a page, WordPress queries your MySQL or MariaDB database to fetch posts, meta details, and user settings. Poorly coded plugins often execute dozens of duplicate or inefficient database queries per page request. Complex queries that search unindexed tables or run deep joins on the wp_postmeta table force the server to work substantially harder, delaying the initial response.
4. PHP Hook Execution and Server-Side Bottlenecks
WordPress relies on action and filter hooks to let plugins hook into the core execution process. When a plugin runs complex PHP loops, image transformations, or calculations during core hooks like init or wp_loaded, it delays the moment your server can send HTML to the visitor's browser. This directly increases your Time to First Byte (TTFB).
5. Synchronous External API Calls and Background Crons
Some plugins communicate with third-party servers—such as email marketing tools, payment gateways, licensing servers, or social media feeds. If a plugin makes an external HTTP request synchronously during a page load, your server must pause and wait for the external service to respond before finishing the page render. If that remote service lags, your website lags with it.
Symptoms of Plugin-Induced Slowdowns
How do you know if your performance issues stem from plugins rather than low-tier hosting or unoptimized images? Look for these distinct warning signs:
High Time to First Byte (TTFB): The browser waits a second or longer just to receive the initial HTML response from your server.
Sluggish WP Admin Dashboard: Saving posts, navigating settings, or editing pages takes several seconds, even when visitors experience decent front-end speeds due to page caching.
Random 504 Gateway Timeout or 500 Internal Server Errors: Heavy PHP scripts exceed execution time limits or exhaust your PHP memory limit under traffic spikes.
Poor Core Web Vitals Scores: Metrics like Interaction to Next Paint (INP) and Largest Contentful Paint (LCP) fail performance audits due to excessive main-thread JavaScript execution. (For a deep dive into fixing these metrics, see our guide on WordPress Core Web Vitals).
Step-by-Step Audit: Isolating and Fixing Slow Plugins
Before making any changes to your active plugins or database, always create a full backup of your website. Auditing requires modifying configurations and testing deactivations, which can temporarily alter front-end layouts if handled incorrectly.
Step 1: Measure Server Overhead with Query Monitor
The free Query Monitor plugin is an essential tool for diagnosing server-side performance bottlenecks. It gives you a detailed look into database queries, PHP execution time, and enqueued assets.
Install and activate Query Monitor on your staging site or live site (logged in as an administrator).
Navigate to your homepage, a blog post, and your WooCommerce shop page (if applicable).
Hover over the Query Monitor status bar at the top of your screen to inspect total generation time, memory usage, and database queries.
Click Queries by Component to see which specific plugins are executing the highest volume of queries or causing long query times.
Click HTTP API Calls to check if any plugins are making slow outbound calls to external servers during page requests.
Step 2: Audit Autoloaded Options Data
Heavy autoloaded data is a hidden killer of WordPress speed. If your autoloaded options exceed 1 MB, server performance starts to degrade.
Access your database via phpMyAdmin or your host’s database manager.
Run the following SQL query to check total autoloaded data size:
SELECT SUM(OCTET_LENGTH(option_value)) / 1024 / 1024 AS autoload_size_mb FROM wp_options WHERE autoload = 'yes';
If the result is larger than 1 MB, identify which plugins are responsible by running:
SELECT option_name, LENGTH(option_value) AS option_size FROM wp_options WHERE autoload = 'yes' ORDER BY option_size DESC LIMIT 20;
Deactivate and safely remove plugins that leave massive, obsolete options behind. For a complete guide on clearing out orphaned transients and option bloat, read our detailed post on cleaning up database bloat.
Step 3: Unload Unnecessary Assets Page-by-Page
If a plugin is necessary for one page (like a contact form or gallery) but enqueues scripts sitewide, you don't have to delete the plugin. Instead, restrict where its scripts run.
You can use script optimization tools like Perfmatters or Asset CleanUp to unload assets conditionally. For example, you can configure the plugin to disable your form scripts on all pages except /contact. This immediately reduces HTTP requests and main-thread JavaScript execution on your highest-traffic pages.
Step 4: Replace Multi-Tool Bloatware with MU-Plugins or Lightweight Alternatives
Multi-purpose "all-in-one" utility plugins often pack dozens of features you never use, running background tasks you don't need. Consider replacing heavy plugins with lightweight alternatives or custom code snippets:
Heavy / Overloaded Plugin Type
Lightweight Alternative / Fix
Heavy Analytics / Tracking Plugins
Server-side tracking, Google Tag Manager, or lightweight privacy-focused analytics scripts inserted via header.
Bloated Social Share Plugins
Simple SVG share links added directly to your theme, avoiding external JS rendering.
Feature-Heavy Security Suites
Server-level firewalls (Cloudflare, QUIC.cloud) and lightweight security hardeners instead of heavy PHP scanners.
Code Snippet / Header-Footer Plugins
Custom Must-Use (MU-plugin) PHP files placed in wp-content/mu-plugins/.
How to Prevent Plugin Bloat in the Future
Maintaining a fast site requires ongoing discipline when selecting and updating plugins. Follow these rules before installing new software:
Check update frequency and support: Abandoned plugins often break compatibility with newer PHP versions, causing fatal errors or silent performance leaks.
Audit before and after installing: Run a speed test (such as PageSpeed Insights or GTmetrix) before activating a new plugin, then test again immediately after. If performance drops significantly, look for a lighter alternative.
Prefer host-level solutions: Use your hosting provider’s built-in caching, staging, and backup features rather than installing separate WordPress plugins for tasks your server can handle natively.
Keep plugins updated: Plugin developers regularly release patches that optimize database queries and fix PHP memory leaks. Follow standard safety steps when upgrading by reviewing our guide on how to safely update plugins and themes.
When to Call a Professional Engineer
Auditing plugins on simple blogs or brochure sites is usually straightforward. However, on large e-commerce sites, membership platforms, or custom-built WooCommerce applications, disabling or reconfiguring plugins can easily break critical checkout flows, database relationships, or custom integrations.
If your WordPress dashboard is dragging, your TTFB remains high despite caching, or you are uncomfortable querying your database directly, let our senior engineers diagnose the issue for you. Through our Speed Pass service, we optimize database queries, remove asset bloat, clean autoloaded options, and speed up server response times on a safe, backup-first workflow.
Not sure where to start? You can also request a free site diagnosis. We’ll review your site’s bottlenecks, explain exactly what's slowing it down, and provide a flat price to fix it with no obligation.
### FAQ
**Q: Does deactivating a plugin completely stop it from slowing down my site?**
A: Deactivating a plugin stops its PHP code from executing on page loads, which immediately resolves script execution and database query overhead. However, deactivated plugins still occupy disk space and may leave behind autoloaded database options or custom database tables. To fully clean up a plugin, you must uninstall it and verify its database entries are removed.
**Q: How many plugins are too many for a WordPress site?**
A: There is no fixed maximum number of plugins. A site running 60 lightweight, well-coded utility plugins can easily outperform a site running 5 bloated, poorly coded plugins. Focus on total page size, database query counts, and server response time (TTFB) rather than the total number of plugins installed.
**Q: Why is my WordPress admin dashboard slow even when page caching is enabled?**
A: Page caching serves pre-rendered HTML files to logged-out visitors, bypassing PHP and database processing. However, the WP Admin dashboard cannot be cached because it displays dynamic, real-time data. If your dashboard is slow, inefficient plugins are executing heavy database queries or uncached PHP hooks on every admin request.
**Q: Can I replace plugins with code snippets in functions.php?**
A: Yes, but adding custom code directly to your theme's functions.php file can lead to issues if you ever change themes. A safer approach is to place code snippets inside a Must-Use plugin (located in wp-content/mu-plugins/), which remains active regardless of theme changes and executes cleanly without plugin overhead.
## How to Safely Update WordPress Plugins, Themes, and Core
(https://wpmend.com/blog/safely-update-wordpress-plugins-themes-core)
Published 2026-08-30 · Updates
To safely update WordPress without breaking your site, always perform updates on a staging clone first, maintain offsite backups, and update components in a specific order: plugins first, theme second, and WordPress core last. Never run major updates directly on a live site without verifying PHP version compatibility and clearing active caching layers.
Every WordPress administrator eventually faces the daunting orange update notification badge. While clicking "Update All" seems quick and easy, doing so on a live production environment is one of the leading causes of site outages, database corruptions, and broken layouts. When software updates collide with outdated code or server incompatibilities, a functional website can disappear in seconds.
Below is the exact update protocol engineered by professional WordPress maintainers to eliminate downtime, isolate conflicts, and keep your site running smoothly.
What Happens When WordPress Updates Go Wrong
When an update breaks a website, the symptoms usually fall into one of four distinct categories:
The Critical Error or White Screen of Death: A PHP fatal error occurs, halting page execution entirely and displaying a generic error message or a completely blank white screen.
Visual and Layout Distortion: CSS styles fail to load, script-dependent elements like sliders or dynamic menus stop working, or page builder layouts collapse.
Functional Silent Failures: The front end appears fine, but crucial background processes stop working—such as checkout gateways failing, contact forms dropping submissions, or analytics scripts disconnecting.
Admin Lockouts and Database Errors: Upgrades fail halfway through database migrations, resulting in continuous "Database Update Required" screens or invalid credentials errors.
The Root Causes of Update Breakages
Understanding why updates fail helps you anticipate problems before they affect your visitors. The most common causes include:
1. PHP Version Mismatches
WordPress core and modern plugins frequently deprecate older PHP functions. If a plugin update relies on PHP 8.1 features but your hosting server is running PHP 7.4, the interpreter will crash with a fatal error the moment the new code executes.
2. Dependency Incompatibilities
WordPress relies on an interconnected ecosystem of themes, plugins, and core files. If Plugin A requires a specific script library that Theme B unhooks or overrides, updating either component can trigger a conflict. If your WordPress site broke after an update, an unaddressed dependency gap is usually the culprit.
3. Incomplete Transfers or Server Timeouts
During an update, WordPress downloads an archive, extracts it, replaces old files, and performs database migrations. If your host imposes strict script execution time limits (max_execution_time) or low memory limits (memory_limit), the process may cut off halfway through, leaving a missing or corrupted plugin folder.
4. Stale Caching Layers
Page caching plugins, server-level Redis/Memcached object stores, and Cloudflare CDNs store static versions of your site. If the backend code changes but the frontend continues requesting old JavaScript or CSS files, the browser will fail to render pages correctly.
The 5-Step Safe Update Protocol
To avoid unexpected outages, follow this five-step workflow every time updates are available.
Step 1: Perform a Full Offsite Backup
Never rely solely on host-level automatic backups, which can sometimes fail or overwrite themselves during emergency restores. You need two distinct elements:
The Database: An export of your entire SQL file containing pages, posts, settings, and user data.
The File System: A complete snapshot of your wp-content directory (themes, plugins, and uploads), along with wp-config.php and .htaccess.
Store these backups offsite using cloud storage (such as Amazon S3, Dropbox, or Google Drive) or an isolated server so you can access them even if your web host becomes unreachable.
Step 2: Create or Sync a Staging Environment
A staging site is an exact sandbox clone of your live site running on the same server environment. Most modern hosting providers offer one-click staging setup. If yours does not, create a staging subdomain (e.g., staging.yoursite.com) manually and clone your production database and files.
Always run and verify your updates on the staging site first. If a fatal error occurs here, your live visitors remain entirely unaffected.
Step 3: Verify System and PHP Requirements
Before initiating updates, check the changelogs of major plugins (such as WooCommerce, Elementor, or advanced form builders). Look specifically for notes marked "Breaking Changes" or increases in minimum PHP versions.
You can check your current PHP version in your WordPress admin dashboard under Tools > Site Health > Info > Server. Ensure your PHP version meets or exceeds the requirements of the latest updates you intend to apply.
Step 4: Execute Updates in the Correct Sequence
Order matters when updating WordPress. Applying changes out of order increases the likelihood of dependency errors. Use this sequence on staging:
Translation Files and Minor Plugin Patches: Update small, single-purpose plugins and minor bug-fix releases (e.g., updating from v2.1.1 to v2.1.2) first.
Major Plugin Updates: Update complex, feature-heavy plugins next. Process these one by one, checking the frontend after each update rather than using bulk actions.
Active Theme and Child Theme: Update your parent theme. If you use a child theme, double-check that your custom functions in functions.php do not call deprecated theme methods.
WordPress Core: Apply WordPress core updates last. Core updates assume that connected plugins and themes are already running compatible code.
// Update Sequence Flow
[1. Minor Plugins] -> [2. Major Plugins (1-by-1)] -> [3. Theme] -> [4. WordPress Core]
Step 5: Post-Update Audit and Cache Flushing
Once updates complete on staging, perform a thorough post-update audit:
Clear all server-level, object, and browser caches.
Open an Incognito window and test critical visitor paths: submit contact forms, add items to a shopping cart, log in as a standard subscriber, and check key page layouts.
Check your server error log or enable WordPress debugging temporarily by setting define('WP_DEBUG', true); in wp-config.php to spot hidden PHP warnings.
If everything passes inspection on staging, repeat the exact same sequence on your production site—or push the staging site to production using your host's deployment tool during low-traffic hours.
How to Handle Unexpected Failures
If an update slips through and crashes your live site, remain calm. Here is how to regain control quickly:
Access the Server via SFTP/SSH: If you are locked out of the dashboard due to a critical error, connect via SFTP or your host's File Manager.
Isolate the Broken Plugin: Navigate to /wp-content/plugins/ and rename the folder of the plugin you just updated (e.g., change /woocommerce/ to /woocommerce-disabled/). This forces WordPress to deactivate that specific plugin instantly, restoring site access.
Roll Back the Version: If you need to revert a single plugin or theme to its previous working state without restoring the entire database, follow our guide on how to downgrade a WordPress plugin or theme safely.
Best Practices for Long-Term Update Prevention
To reduce risk over time, adopt these operational habits:
Setting / Practice
Recommended Configuration
Why It Matters
Core Updates
Enable automatic minor/security patches only.
Protects against security flaws automatically while preventing major structural shifts without testing.
Plugin Updates
Disable bulk auto-updates for major e-commerce/builder plugins.
Ensures high-risk changes are vetted on staging before going live.
Plugin Footprint
Remove inactive or abandoned plugins.
Fewer plugins mean fewer code vectors that can conflict during core updates.
When to Call a Professional
While standard updates are manageable for small blogs, larger sites carry significantly higher risks. You should involve a professional engineer if:
You run a high-traffic e-commerce store (like WooCommerce) where unexpected downtime directly causes lost revenue.
Your site relies on custom-coded plugins, complex database schemas, or legacy theme frameworks that haven't been updated in years.
An update left your site stuck in a crash loop, and standard SFTP isolation techniques fail to bring it back online.
If you'd rather not worry about update crashes, offsite backups, or staging setups, let our team handle it for you. With the Mend Care Plan, senior WordPress engineers manage your updates, security monitoring, and offsite backups every month for a flat $99/month.
If an update has already broken your site and you need help fixing it right now, submit a request for a Mend Quick Fix or an Emergency Rescue. We will safely diagnose and repair your site on a backup-first workflow, usually the very same day.
### FAQ
**Q: Should I enable automatic updates for all my WordPress plugins?**
A: It is safest to enable automatic updates only for minor security patches and lightweight, trusted plugins. Complex plugins like WooCommerce, page builders, or membership tools should always be tested on staging first.
**Q: What is the correct order to update WordPress plugins, themes, and core?**
A: The proper sequence is to update minor plugin patches first, followed by major plugins one by one, your active theme next, and WordPress core last. This sequence ensures dependent libraries exist before core code expects them.
**Q: What should I do if an update crashes my WordPress admin dashboard?**
A: Access your site via SFTP or your host File Manager, navigate to wp-content/plugins, and rename the folder of the recently updated plugin. This immediately deactivates the plugin and restores administrative access.
**Q: Is a staging site really necessary for a simple WordPress website?**
A: While smaller websites carry fewer plugin interaction risks, a staging environment is the only way to guarantee zero downtime. It ensures that any unexpected PHP or database conflicts are discovered away from live visitors.
## Rolling Back Broken WordPress Updates When Admin Access Is Lost
(https://wpmend.com/blog/rollback-wordpress-update-without-admin-access)
Published 2026-08-29 · Updates
When a WordPress plugin or theme update breaks your website and locks you out of the admin dashboard, you cannot simply log in and click a rollback button. To fix the issue safely, you must isolate the broken extension, replace its files with a known stable version using FTP, File Manager, or WP-CLI, or restore a host backup if database schema changes occurred. Always take a complete file and database backup before making any manual changes to your server.
What Happens When an Update Breaks Your Site?
Clicking "Update" on a plugin or theme is usually routine, but severe breaks can occur if the new code contains a PHP syntax error, conflicts with another active plugin, or requires a higher PHP version than your server runs. Depending on your server environment and WordPress configuration, you will typically see one of four symptoms:
The Critical Error Notice: A plain screen stating "There has been a critical error on this website." WordPress halts execution to prevent corrupted data from saving.
White Screen of Death (WSOD): A completely blank white page on both the front end and the /wp-admin login URL.
500 Internal Server Error: A generic web server response triggered when a fatal PHP error prevents the web server from building the page response.
Broken Layout or Broken Features: The admin area remains accessible, but frontend styling, JavaScript forms, or checkout flows completely collapse.
If you are encountering a site-wide crash, review our detailed guide on what to do when WordPress breaks after an update or our guide to resolving WordPress critical errors.
Step 1: Identify the Faulty Plugin or Theme
Before you can roll back the problematic update, you must identify precisely which plugin or theme triggered the PHP crash. If you updated multiple items simultaneously, do not guess.
Enable WordPress Debugging
Because the admin area is unavailable, you need to enable WordPress debug logging via your hosting control panel's File Manager or an SSH/FTP connection.
Connect to your server via FTP or open your hosting File Manager (e.g., cPanel File Manager, SiteTools, or SpinupWP).
Locate the wp-config.php file in your WordPress root directory (usually public_html or www).
Download a copy of wp-config.php to your computer as a backup.
Open wp-config.php in an editor and search for the line reading define('WP_DEBUG', false);.
Replace that line with the following code snippet:
// Enable WP_DEBUG mode
define( 'WP_DEBUG', true );
// Enable Debug logging to /wp-content/debug.log
define( 'WP_DEBUG_LOG', true );
// Disable display of errors on the frontend
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
Save the file and refresh your broken web page. WordPress will now write all PHP fatal errors to a log file located at /wp-content/debug.log. Open that log file and scroll to the bottom. Look for lines marked Fatal error or Parse error. The file path inside that error line will pinpoint the exact directory causing the problem, such as /wp-content/plugins/woocommerce/ or /wp-content/themes/astra/.
Method 1: Manual Rollback via FTP or File Manager (Easiest & Safest)
Once you know which plugin or theme update caused the crash, the fastest manual recovery method is replacing the upgraded directory with an older, stable version.
Deactivate the Offending Plugin
To immediately restore access to your site while you prepare the rollback files, temporarily disable the plugin by altering its folder name:
Navigate to /wp-content/plugins/ in your File Manager or FTP client.
Find the folder corresponding to the broken plugin (for example, elementor).
Rename the folder to elementor-disabled.
Renaming the directory breaks the path WordPress uses to load the plugin. WordPress will automatically mark the plugin as inactive, clearing the fatal error and allowing you to log back into /wp-admin.
Download the Previous Version
If the plugin is hosted on the official WordPress.org repository:
Go to the plugin's page on wordpress.org/plugins/.
Click Advanced View in the right-hand sidebar.
Scroll down to the bottom of the page to the PREVIOUS VERSIONS section.
Select the version you were running before the update and download the .zip archive.
Note: If you are rolling back a premium theme or commercial plugin, download the previous release zip file directly from your vendor portal (e.g., CodeCanyon, ThemeForest, or the plugin developer's account dashboard).
Upload and Replace
Unzip the downloaded archive on your computer. You will get a clean folder named after the plugin.
Via FTP or File Manager, navigate back to /wp-content/plugins/ on your server.
Delete the temporary elementor-disabled folder.
Upload the clean, unzipped folder into /wp-content/plugins/.
Log into your WordPress admin dashboard and reactivate the plugin.
If you are locked out completely and these steps do not clear the issue, check our guide on fixing the WordPress White Screen of Death or review steps for regaining lost admin access.
Method 2: Roll Back via WP-CLI (Command Line)
If you have SSH access to your server, WP-CLI (WordPress Command Line Interface) offers the fastest way to perform a controlled rollback without dealing with manual file extractions.
Roll Back a Plugin with WP-CLI
Open your terminal, connect via SSH, and navigate to your WordPress root directory. Run the following commands:
# Check the installed version of the plugin
wp plugin status elementor
# Perform an automatic rollback to a specific version
wp plugin update elementor --version=3.18.0 --force
The --force flag instructs WP-CLI to overwrite the current installed version with the specified older release directly from the WordPress repository.
Roll Back a Theme with WP-CLI
Similarly, to downgrade a theme to a prior version:
# Roll back active theme to an earlier release
wp theme update astra --version=4.5.0 --force
If you aren't sure which exact version you were using previously, view the plugin or theme changelog on WordPress.org to locate the previous stable version number.
Method 3: Restoring via Hosting Backups (When Database Schema Changes occur)
File replacement works for 90% of bad updates. However, complex plugins like WooCommerce, Yoast SEO, or membership utilities often execute database migrations during major version updates (e.g., updating from version 4.x to 5.x). Reverting only the PHP code files while leaving a migrated database schema behind can result in persistent database errors or lost configuration data.
If replacing the files throws database warnings or breaks key site features, perform a full site restore from a host backup taken immediately prior to the update:
Hosting Provider
Restore Location
Best Practice
SiteGround
Site Tools > Security > Backups
Restore both Web Files and Database from the same timestamp.
Kinsta / WP Engine
MyKinsta / User Portal > Backups
Use the 1-click restore feature directly to a staging environment first to verify.
cPanel Hosts
cPanel > JetBackup or File/DB Restore
Restore the database table prefix first, then replace the `/wp-content/` directory.
If you need step-by-step instructions on setting up automated backups so you are protected next time, read our guide on maintaining database health and backup safety.
How to Prevent Bad Updates from Crashing Your Site
Once your site is operational, take proactive precautions to ensure future updates do not cause unscheduled downtime:
Use a Staging Environment: Never run major plugin or theme updates directly on a live production website. Clone your site to a staging server, execute all updates, test thoroughly, and then push changes to live.
Stagger Updates: Avoid clicking "Update All". Update one plugin at a time, testing core functionality (contact forms, checkout, navigation) after each step.
Disable Auto-Updates for Complex Plugins: Keep automatic background updates enabled for minor security patches, but disable automatic updates for major plugins, page builders, and active themes.
Maintain Offsite Backups: Store daily or real-time backups on an isolated cloud server (S3, Dropbox, or dedicated storage) completely separate from your hosting server.
When to Call a Professional Engineer
Rolling back a plugin or theme usually takes minutes when files are straightforward. However, complex failures require developer expertise. You should call an expert if:
A database migration ran during the update and corrupting custom WooCommerce orders or user records.
You cannot identify the fatal error cause even after checking the debug.log file.
Your site remains unresponsive or stuck in loop redirects after clearing files and cache.
The broken update modified custom child theme functions or database tables that lack a recent backup.
If your site is down and you don't have the time or technical confidence to fix it manually, our team of senior WordPress engineers can fix it for you fast. Through our safe, backup-first workflow, we diagnose broken updates and restore functionality without losing your content or customer data.
Get your site fixed today with our Quick Fix ($69) or request an immediate Emergency Rescue ($299) for severe outages. You can also start with a Free Diagnosis to receive a clear, upfront assessment before spending a dime.
To avoid update headaches entirely, explore our Mend Care Plan ($99/mo), which includes managed updates, offsite backups, continuous uptime monitoring, and proactive staging tests.
### FAQ
**Q: Can I roll back a plugin if I can't access wp-admin?**
A: Yes. You can deactivate the offending plugin by renaming its directory in /wp-content/plugins/ via FTP or File Manager, then upload an older version downloaded from WordPress.org. Alternatively, you can use WP-CLI via SSH to force a rollback.
**Q: Will rolling back a plugin delete my settings or data?**
A: In most cases, no. Plugin settings and user data are stored safely in your WordPress database, not inside the plugin folder you are replacing. However, if the plugin performed a database migration during a major upgrade, reverting the files alone may cause schema mismatches requiring a database backup restore.
**Q: How do I find previous versions of a free WordPress plugin?**
A: Go to the plugin's page on WordPress.org, click on "Advanced View" in the right column, and scroll down to the bottom where you can select and download ZIP files for older release versions.
**Q: Is it safe to leave WordPress plugins on an older version permanently?**
A: No. Running outdated plugins leaves your website vulnerable to known security exploits and compatibility bugs with future WordPress core updates. A rollback should be a temporary measure while you test fixes in a staging environment or report the bug to the plugin developer.
## How Nulled WordPress Plugins Hack Your Site (And How to Clean Them)
(https://wpmend.com/blog/detect-remove-nulled-wordpress-plugins)
Published 2026-08-28 · Security
Nulled WordPress plugins are premium plugins modified to bypass licensing checks, but almost always contain embedded backdoors, obfuscated PHP scripts, and SEO spam injectors. Cleaning a site compromised by nulled software requires completely removing the pirated code, deleting rogue administrator accounts, replacing core and plugin files with clean copies, and auditing the database for persistence mechanisms. Taking a systematic, backup-first approach ensures you can eliminate hidden malware without breaking site functionality.
The Hidden Cost of Nulled Plugins: Why "Free" Software Compromises Security
Nulled plugins and themes are distributed on third-party websites, forums, and file-sharing networks under the guise of free open-source software. While the GNU General Public License (GPL) allows redistributing WordPress code, the entities operating nulled download portals rarely do so out of generosity. Instead, these downloads serve as distribution networks for compromised code.
Distributors modify the plugin source code before packaging it for download. While they remove the license check routines that communicate with the original developer's activation server, they also insert malicious payloads. Because these binaries are installed directly into your web server's execution environment with full PHP permissions, the injected code gains complete control over your files, database, and hosting environment.
Common Symptoms of a Nulled Plugin Infection
Unlike simple coding errors that cause visible failure immediately, malware hidden within nulled software is engineered to remain undetected for as long as possible. Attackers want long-term access to your host's bandwidth, database records, and search engine reputation. Look out for these common warning signs:
Conditional Redirects: Mobile visitors or traffic arriving from search engines are redirected to malicious landing pages (such as fake tech support, online casinos, or phishing portals), while logged-in administrators see normal site behavior.
Unexplained SEO Spam: Your site begins ranking in Google for thousands of irrelevant search terms involving pharmaceuticals, gambling, or counterfeit goods due to hidden pages or injected links.
Unauthorized Admin Users: Unknown administrator accounts appear in your WordPress dashboard, often with randomized strings or deceptive names designed to resemble official plugins (e.g., wp_system_admin).
Server Resource Spikes: Excessive CPU and memory utilization reported by your web host, caused by background processes executing command-and-control (C2) instructions, sending outbound spam emails, or hosting crypto-mining scripts.
Google Search Console Alerts: Security warnings indicating that your domain has been flagged for deceptive content, malware distribution, or social engineering.
Anatomy of a Nulled Plugin Backdoor (Technical Breakdown)
Understanding how attackers structure nulled code helps engineers and site owners locate hidden vulnerabilities during an audit. Malicious modifications generally rely on a few common techniques:
1. Obfuscated Payload Execution
Malicious actors mask their code using multi-layer encoding functions such as base64_decode(), gzinflate(), and str_rot13(), combined with dynamic execution functions like eval() or assert(). A typical obfuscated snippet hidden inside an otherwise legitimate plugin file looks like this:
// Example of obfuscated backdoor execution
$payload = 'aWYoaXNzZXQoJF9PQ0FUSU9OWydjbWQrXSkpIHsgZXZhbChiYXNlNjRfZGVjb2RlKCRfT0NBVElPTlsnY21kJ10pKTsgfQ==';
eval(gzinflate(base64_decode($payload)));
When evaluated by the server, this code decodes into a remote execution shell that receives commands sent via modified HTTP headers or custom POST requests.
2. Delayed Execution and Cron Hooks
To avoid immediate detection by automated security scanners during plugin installation, attackers often program backdoors to remain dormant for several days. The nulled software schedules a job in the WordPress Cron system (wp_cron) that triggers the malicious code long after installation, making it difficult to correlate site anomalies with the original plugin upload.
3. Core File and Drop-In Modification
Once activated, the payload rarely stays confined to the plugin directory. The script copies backdoors into core directories such as /wp-admin/ and /wp-includes/, or creates file drop-ins like /wp-content/advanced-cache.php and fake Must-Use plugins in /wp-content/mu-plugins/. This ensures that deactivating or deleting the nulled plugin from the dashboard leaves the backdoor active on the server.
Step-by-Step: How to Audit, Remove, and Remediate Nulled Plugins
If you suspect or confirm that your WordPress site contains nulled plugins, follow this step-by-step remediation guide. Always maintain a clean, offline copy of your backups before modifying any files or database tables.
Step 1: Perform a Full System Backup
Before executing any cleanup commands, create a complete backup of your database and file system using your web hosting control panel (cPanel, SiteTools, or hosting CLI) or a server management tool. If an automated script or cleanup command accidentally removes a required dependency, you can restore your site immediately.
Step 2: Isolate and Delete Nulled Files
Do not rely solely on the WordPress dashboard to deactivate nulled plugins. Malicious code can hook into WordPress filters (such as all_plugins) to hide its presence from the admin UI.
Connect to your server using SFTP or SSH.
Navigate to the /wp-content/plugins/ directory.
Identify every plugin folder downloaded from an unauthorized or unofficial source.
Completely delete those folders from the server.
Step 3: Replace Core WordPress Files and Legitimate Software
Because backdoors frequently spread into core system files, replace all core system files with official, untainted binaries directly from WordPress.org:
Download the official ZIP file corresponding to your current WordPress version from WordPress.org.
Extract the archive locally.
Upload and overwrite your site's /wp-admin/ and /wp-includes/ directories.
Replace root core files such as index.php, wp-login.php, and wp-settings.php. Do not overwrite wp-config.php or your /wp-content/ directory.
Re-download clean copies of all legitimate free and premium plugins directly from official developer accounts, overwriting the folders in /wp-content/plugins/.
Step 4: Audit Database, Autoloaded Options, and Cron Jobs
Backdoors often store persistence parameters directly inside the wp_options table or run via scheduled tasks.
Use WP-CLI or phpMyAdmin to inspect autoloaded database options for suspicious strings:
# Check for suspicious autoloaded options using WP-CLI
wp option list --autoload=on --format=table
Inspect the output for unknown options containing long strings of base64 text, obfuscated code, or calls to eval(). Additionally, inspect active cron tasks using WP-CLI or a management plugin to ensure no malicious recurring jobs exist:
# List all scheduled WordPress cron events
wp cron event list
Delete any scheduled event that points to unknown functions or non-existent plugin files.
Step 5: Clear Hidden Admin Accounts and Invalidate Keys
Ensure attackers cannot log back into the site using stolen sessions or newly created accounts:
Go to Users > All Users in your WordPress dashboard and filter by Administrator. Delete any account you did not explicitly create. You can also run wp user list --role=administrator via SSH.
Open wp-config.php and locate the Authentication Unique Keys and Salts section.
Replace all existing salt values with new strings generated via the official WordPress.org Salt Generator. Updating these keys instantly invalidates all existing user session cookies, forcing every logged-in user to re-authenticate.
Change all user passwords, database user credentials, SFTP passwords, and hosting panel logins.
Long-Term Security Posture: How to Stay Protected
To ensure your server remains clean after remediation, adopt these operational habits:
Source Software Exclusively from Official Repositories: Only download plugins from WordPress.org or verified commercial vendor dashboards. Avoid all third-party redistributors, "GPL clubs," or file-sharing links.
Enforce File Integrity Monitoring: Implement server-level file integrity monitoring or automated security tools to receive alerts whenever core files or plugin directories are modified.
Maintain Web Application Firewall (WAF) Coverage: Deploy an edge-based WAF (such as Cloudflare or host-level WAF rules) to block common web exploit vectors and unauthorized file execution attempts.
Establish a Routine Patch Management Process: Keep WordPress core, themes, and legitimate plugins updated to prevent authorized software from developing vulnerabilities.
When to Call a Professional
Completely eradicating malware introduced by nulled plugins can be difficult when attackers use sophisticated obfuscation, file injection, or database persistence. If malware keeps returning after cleanup, if your domain remains blacklisted by Google or web browsers, or if manual file replacement breaks essential site functionality, professional engineer intervention is necessary.
Our senior WordPress engineers at Mend specialize in deep malware removal and backdoor eradication. We operate on a strict backup-first workflow, manually auditing every file and database table to restore site integrity without data loss. If your site is compromised or struggling with persistent infections, request an Emergency Rescue for immediate resolution or submit your site for a Free Site Diagnosis to receive a flat-rate fix quote before any work begins.
To learn more about remediating security breaches and hardening your WordPress installation, review our detailed guides on How to Clean Up a Hacked WordPress Site, Finding and Removing WordPress Spam Injections, and Stopping Brute-Force Login Attacks.
### FAQ
**Q: What is a nulled WordPress plugin?**
A: A nulled plugin is a premium WordPress plugin that has been illegally modified to remove licensing verification routines. Distributors of nulled software almost always insert hidden backdoors, spam injectors, or admin creation scripts into the binary before sharing it.
**Q: Can automated security plugins remove malware from a nulled plugin?**
A: While security scanners can catch known malware signatures, nulled software frequently uses custom obfuscated code, database persistence, and scheduled cron jobs that automated tools miss. Complete remediation usually requires manual file replacement and database auditing.
**Q: Is downloading nulled plugins legal under the GPL license?**
A: While the GNU General Public License permits sharing WordPress PHP code, third-party sites redistributing "free premium" downloads almost universally alter the original source code to introduce security backdoors, presenting severe operational and security risks.
**Q: How do I remove a Google blacklist warning after cleaning nulled software?**
A: Once you have completely removed all nulled software, replaced core files, cleaned database injections, and verified site security, log into Google Search Console, navigate to Security Issues, and submit a review request explaining the remediation steps taken.
## Clean Up WordPress Database Bloat: Revisions, Transients & Options
(https://wpmend.com/blog/clean-wordpress-database-bloat-revisions-transients-autoload)
Published 2026-08-27 · Performance
WordPress database bloat occurs when tables become overloaded with unnecessary data, such as thousands of post revisions, expired transients, and oversized autoloaded options. Cleaning this leftover data reduces database size, speeds up query execution times, and significantly improves server response times (TTFB) and admin dashboard speed. Always perform a full database backup before removing rows or running SQL queries directly on your site.
What Is WordPress Database Bloat and Why Does It Slow Down Your Site?
Every time you publish a post, save a draft, install a plugin, or update a theme, your database records new information. By default, WordPress rarely deletes old data automatically. Over months or years, a database that should weigh 20 to 50 megabytes can easily balloon into hundreds of megabytes or even gigabytes.
When your database gets bloated, your web server has to work significantly harder on every single page request. Instead of pulling data cleanly from memory, MySQL or MariaDB must scan thousands of unnecessary rows across several core tables. This overhead directly impairs site performance, often causing distinct symptoms across your site:
Sluggish WordPress Admin Area: Saving posts, switching tabs in the dashboard, or loading plugin settings takes 3 to 10 seconds.
High Time to First Byte (TTFB): Visitors experience a noticeable delay before the page starts rendering because database queries take too long to resolve.
Database Server Timeouts: You encounter database connection drops or "MySQL server has gone away" errors during peak traffic spikes or scheduled tasks.
Ballooning Hosting Resource Usage: Your hosting provider warns you about excessive CPU, RAM, or database size limit exceedances.
To eliminate database bloat effectively, you need to target the three primary culprits responsible for over 90% of database bloat in WordPress: post revisions, expired transients, and oversized autoloaded options.
Step 0: Always Create a Complete Database Backup First
Cleaning a database involves deleting data permanently from tables like wp_posts and wp_options. If an SQL query goes wrong or a plugin deletes serialized option data improperly, your site can instantly break or show critical errors. Before running any commands or executing database optimization tools, create a fresh, verified database backup using your hosting control panel (such as cPanel, MyKinsta, or SpinupWP) or a backup plugin.
Culprit 1: Post Revisions and Old Drafts
By default, WordPress saves a new revision every time you update a post or page. While revisions are helpful for restoring earlier content drafts, a site with hundreds of posts published over several years can easily store 10,000+ revision entries in the wp_posts table. Each revision also creates corresponding meta entries in wp_postmeta, multiplying the bloat.
How to Purge Revisions Safely
You can remove existing post revisions using WP-CLI or a dedicated database optimization plugin like WP-Optimize or Advanced Database Cleaner. If you have terminal access, the safest and fastest way is via WP-CLI:
wp post delete $(wp post list --post_type=revision --format=ids) --force
If you prefer running a direct SQL query in phpMyAdmin, execute the following query to remove all post revisions and their associated meta data:
DELETE a,b,c
FROM wp_posts a
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
WHERE a.post_type = 'revision';
Note: If your database table prefix is not wp_, replace wp_posts, wp_term_relationships, and wp_postmeta with your actual table prefix (e.g., wp_5x_posts).
How to Prevent Future Revision Bloat
You can limit the maximum number of revisions WordPress stores per post by adding a single line to your wp_config.php file. Open wp-config.php and add this directive above the line that reads /* That's all, stop editing! Happy publishing. */:
define('WP_POST_REVISIONS', 5);
Setting this value to 5 ensures WordPress keeps only the five most recent revisions per post, discarding older ones automatically.
Culprit 2: Expired Transients in wp_options
Transients are a simple form of caching inside WordPress that store temporary data (such as API responses, expiration timers, or external RSS feeds) inside the wp_options table. When transients expire, WordPress is supposed to clear them when a page requests them. However, if a plugin creates hundreds of unique temporary transients that are never requested again, they remain in the database indefinitely as garbage rows.
How to Purge Expired Transients
If you have WP-CLI installed, you can purge all expired transients across the site with one command:
wp transient delete --expired
To purge all transients (both active and expired, forcing plugins to regenerate fresh data):
wp transient delete --all
If you prefer using phpMyAdmin, run this SQL query to safely target and delete expired transient records from the wp_options table:
DELETE FROM wp_options
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < UNIX_TIMESTAMP();
DELETE FROM wp_options
WHERE option_name LIKE '_transient_%'
AND option_name NOT LIKE '_transient_timeout_%'
AND CONCAT('_transient_timeout_', SUBSTRING(option_name, 12))
NOT IN (SELECT option_name FROM wp_options);
Culprit 3: Oversized Autoloaded Options
This is frequently the single largest cause of slow database response times on WordPress sites. Autoloaded options are settings stored in the wp_options table where the autoload column is set to yes (or on in newer WordPress versions). On every single page load, WordPress executes a single database query that pulls all autoloaded options into PHP memory.
Ideally, total autoloaded data should remain under 800 KB (and under 500 KB on high-performance sites). If plugins store huge arrays, page builder caches, or tracking logs inside autoloaded options, this payload can skyrocket to 5 MB, 10 MB, or more, slowing down every single page request across your entire site.
1. Check Your Total Autoloaded Size
Run this query in phpMyAdmin to determine the exact memory footprint of your autoloaded options:
SELECT SUM(LENGTH(option_value)) / 1024 / 1024 AS total_autoload_mb
FROM wp_options
WHERE autoload = 'yes';
If the result is greater than 1 MB, your site will benefit significantly from reducing this footprint.
2. Identify the Largest Autoloaded Rows
To find out which specific plugins or options are taking up the most space, run this query:
SELECT option_name, LENGTH(option_value) AS option_size_bytes
FROM wp_options
WHERE autoload = 'yes'
ORDER BY option_size_bytes DESC
LIMIT 20;
Option Name
Typical Source
Recommended Action
rewrite_rules
WordPress Core / Permalinks
Normal unless over 100 KB; re-save permalinks to rebuild if corrupt.
_transient_...
Transient cache leftover
Purge transients or set autoload = 'no'.
woocommerce_...
WooCommerce session/cache data
Clean up orphaned WooCommerce carts and session tables.
elementor_... or page builder cache
Page builder CSS/data caches
Clear builder cache in settings; set static asset loading.
3. Turn Off Autoload for Non-Essential Options
Once you identify massive options that do not need to load on every frontend page request (for instance, uninstalled plugin remnants or backend administrative logs), change their autoload state from yes to no:
UPDATE wp_options
SET autoload = 'no'
WHERE option_name = 'problematic_option_name';
Warning: Never delete or turn off autoload for critical core options such as siteurl, home, active_plugins, or template. Doing so will make your site unrenderable or trigger a WordPress White Screen of Death.
How to Keep Your WordPress Database Clean Long-Term
Limit Revisions and Autosaves in wp-config.php: Keep revisions limited to 5 and extend the autosave interval from 60 seconds to 300 seconds using define('AUTOSAVE_INTERVAL', 300);.
Clean Up Uninstalled Plugin Tables: Many plugins leave custom tables behind when uninstalled. Delete orphan tables manually or using WP-CLI after deinstalling old plugins.
Optimize Table Storage: Periodically run an SQL OPTIMIZE TABLE command on key tables (wp_posts, wp_postmeta, wp_options) to defragment storage after deleting large amounts of data.
Schedule Automated Database Cleanup: Use a lightweight maintenance plugin or cron job to prune trash comments, expired transients, and draft revisions on a monthly basis.
When to Call a Professional Engineer
Database optimization is straightforward when dealing with post revisions, but modifying the wp_options table or altering serialized data directly in SQL carries serious risk. Misconfiguring autoloaded options or deleting referenced IDs across wp_postmeta can break plugin settings, disconnect WooCommerce product variations, or lead to an Error Establishing a Database Connection.
If your WordPress admin remains extremely slow despite basic cleanup, if your database has corrupted tables, or if you aren't comfortable executing raw SQL commands, it is safer to let an experienced engineer handle it.
Through Mend's Speed Pass, senior WordPress engineers inspect your database, identify bloated autoloaded options safely without breaking serialized arrays, prune orphan data, and optimize server response times. If your database error is actively crashing your site, you can submit a Emergency Rescue request or get a free diagnosis before any work begins.
Related guides from our blog: Learn how to speed up WordPress comprehensively or troubleshoot frontend rendering with our guide on how to eliminate render-blocking resources without breaking your site.
### FAQ
**Q: Is it safe to delete all post revisions in WordPress?**
A: Yes, deleting post revisions is safe and does not delete your actual published posts or saved drafts. However, you will lose the ability to revert your posts to earlier, historical saved versions.
**Q: What is a safe size for total autoloaded options in WordPress?**
A: A healthy WordPress site should keep autoloaded options under 800 KB in total size. Anything over 1 MB can start to negatively affect server performance and dashboard loading times.
**Q: Will clearing transients log my users out or break my site?**
A: No, transients are temporary cached records designed to be safely deleted or rebuilt at any time. Clearing transients will not delete user accounts, active user login sessions, or published content.
**Q: Why does my database file size remain large even after deleting thousands of rows?**
A: Database management systems like MySQL allocate disk space that isn't automatically released back to the operating system when rows are deleted. Running an `OPTIMIZE TABLE` command reclaims that unused overhead.
## How to Fix WordPress 404 Errors on All Pages Except Homepage
(https://wpmend.com/blog/fix-wordpress-404-errors-except-homepage)
Published 2026-08-26 · Errors
If your WordPress homepage loads without any problems, but clicking any inner link—like a blog post, product page, or contact form—leads directly to a "404 Not Found" error page, your server's rewrite rules or WordPress permalink settings are misconfigured. In almost all cases, WordPress has lost the ability to route incoming URLs through its central index file. You can usually solve this in seconds by navigating to Settings > Permalinks in your admin dashboard and clicking Save Changes to flush the rewrite rules.
When that quick trick fails, the issue lies deeper in server config files like .htaccess or Nginx virtual host files, missing Apache modules, or file permission locks. Below, we break down why this happens and walk through every safe step to restore your site's links completely.
What You Are Seeing (and What It Means)
When you encounter this specific issue, the homepage works normally because web servers automatically look for index.php or index.html at the site root folder when no subfolder or path is provided in the address bar. However, inner pages rely on dynamic URL routing managed by WordPress standard permalinks.
Typical symptoms include:
The Homepage Loads Fine: Your main domain (e.g., https://example.com) renders cleanly with all images, styles, and layout elements intact.
Every Subpage Returns 404: Clicking any internal link (such as https://example.com/about/ or https://example.com/sample-post/) brings up either a server-level "404 Not Found" page or your theme's custom 404 template.
Plain Permalinks Work: If you test a raw URL structure like https://example.com/?p=123, the page loads normally, confirming that the content still exists in your database and that only human-readable "pretty" URLs are failing.
Why Is This Happening?
WordPress uses a process called URL rewriting. When a user visits a custom permalink like /contact/, the web server checks if a physical file or directory named "contact" exists on the hard drive. Because it doesn't, the web server needs to silently pass that request to index.php, which then queries your database and displays the correct page.
When every inner page throws a 404 error, that silently rewritten route has broken down. The primary causes include:
Corrupted or Missing .htaccess File: On Apache and LiteSpeed web servers, routing rules live in a hidden file called .htaccess in your site root. If this file was deleted, modified by a caching or security plugin, or stripped during a migration, dynamic routes fail.
Unwritten Rewrite Cache: WordPress stores rewrite rules in the database. Updating plugins, changing custom post types, or migrating to a new host can leave this cache out of sync with the server.
Missing Nginx Directives: Nginx web servers do not read .htaccess files. If your host moved your site to an Nginx environment without adding the standard try_files directive to the server configuration, every subpage will return a hard server 404 error.
Disabled Server Modules (Apache): If Apache’s mod_rewrite module is turned off, or if AllowOverride is set to None in the server configuration, Apache ignores the instructions inside .htaccess.
Always back up your site before modifying server files or changing core site settings. If an update recently broke your site or you suspect multiple files are corrupt, review our guide on how to recover when WordPress breaks after an update.
Step-by-Step Fixes for 404 Permalink Errors
Work through these steps in order. They start with the easiest, safest dashboard-based solutions before moving to server configuration checks.
Step 1: Save Permalinks in the Dashboard (The 10-Second Fix)
In most instances, flushing the WordPress internal rewrite cache immediately restores all inner pages. You do not need to change any text fields to execute this flush.
Log into your WordPress admin dashboard.
Go to Settings > Permalinks in the left sidebar menu.
Note your current permalink structure (usually Post name).
Scroll down to the bottom of the page without changing any settings and click Save Changes.
Open a new browser window (or incognito tab) and test your inner pages.
When you click "Save Changes," WordPress recreates its internal database routing table and attempts to rewrite the rule set to your server's configuration file. If this resolves the issue, you're done!
Step 2: Rebuild the .htaccess File (Apache or LiteSpeed)
If saving your permalinks does not solve the problem or shows a notice that your .htaccess file is not writable, the file may be corrupt or locked by incorrect file permissions.
To rebuild a clean default .htaccess file using your web host's File Manager or SFTP client:
Connect to your web host using SFTP or open your hosting control panel's File Manager (e.g., cPanel or Plesk).
Navigate to your WordPress site root directory (typically public_html or www).
Locate the .htaccess file. Because files starting with a dot are hidden by default, enable "Show Hidden Files" in your FTP client or File Manager settings.
Rename the existing file to .htaccess_old to keep a backup copy.
Create a brand-new file named .htaccess in the same root folder.
Paste the default WordPress core rules into the new file:
# BEGIN WordPress
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
Save the file and set its permissions to 0644 (rw-r--r--).
Return to Settings > Permalinks in your WordPress dashboard and click Save Changes again.
If page content still fails to load or gives permission errors, check if you have severe hosting-level issues using our troubleshooting guide for WordPress 500 internal server errors.
Step 3: Fix Nginx Web Server Configuration
Because Nginx does not use .htaccess, editing or saving permalinks in WordPress will have no effect if the host's Nginx configuration is missing the proper routing rule. If your server uses Nginx, you must make sure your server block file includes the try_files instruction inside the primary location block.
In your Nginx site configuration file (typically located at /etc/nginx/sites-available/yourdomain.conf), ensure the location block looks like this:
location / {
try_files $uri $uri/ /index.php?$args;
}
This directive instructs Nginx to first look for a real file matching the URL ($uri), then a real directory ($uri/). If neither is found, it safely forwards the request to /index.php with all original query arguments attached. Once added, test the Nginx configuration with sudo nginx -t and reload Nginx with sudo systemctl reload nginx.
Note: On managed WordPress hosts like Kinsta, WP Engine, or SiteGround, you will not have direct access to Nginx configuration files. If you run Nginx on a managed host and permalink flushes fail, contact your hosting support to reset your site's Nginx rewrite rules.
Step 4: Verify Apache mod_rewrite and AllowOverride Settings
If you run an unmanaged virtual private server (VPS) with Apache (such as DigitalOcean, AWS EC2, or Linode), your site may produce 404 errors on subpages because Apache is overriding or ignoring your .htaccess file.
First, ensure the rewrite module is enabled by running this terminal command:
sudo a2enmod rewrite
sudo systemctl restart apache2
Second, check your main Apache virtual host file or apache2.conf file. Locate the directory block pointing to your web root and ensure AllowOverride is set to All instead of None:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
If AllowOverride is set to None, Apache ignores your .htaccess file completely, causing all permalinks outside the homepage to throw 404 errors.
Step 5: Address Plugin and Custom Post Type Conflicts
If you recently added a custom post type via a plugin or custom child theme code, improper post type registration can break routing for those specific items or conflict with general site permalinks.
When registering custom post types in PHP, developers must call the registration function inside the init hook without manually calling flush_rewrite_rules() on every page load. If a security or custom post type plugin mismanages custom rewrite tags, temporarily disable custom plugins to see if regular permalinks return.
If you recently upgraded server environments or upgraded PHP versions and noticed new script conflicts, see our step-by-step guide on fixing WordPress errors after a PHP upgrade.
How to Prevent WordPress Permalinks from Breaking
Once your site links are functioning properly, take these steps to ensure routing problems don't return during future updates or migrations:
Avoid Unnecessary flush_rewrite_rules() Calls: If you build custom plugins or themes, never call flush_rewrite_rules() on every page load inside functions.php. Execute it strictly during plugin activation or deactivation hooks.
Lock Down .htaccess File Permissions: Ensure your .htaccess file uses standard file permissions (0644). This prevents unauthorized scripts from altering core web routing while allowing WordPress core to make legitimate updates.
Check Server Files After Migrations: When migrating a site from a staging area to a live domain, always double-check that your migration plugin correctly synced hidden files like .htaccess and updated the site URL parameters in the database.
Keep Up to Date with Server Changes: If your web host changes server engines (for instance, moving from Apache to Nginx reverse-proxy setups), confirm that rewrite rules were migrated properly. If you need to safely rollback plugin updates or server changes during maintenance, read our guide on how to downgrade a WordPress plugin or theme safely.
When to Call a Professional
While resaving permalinks fixes 404 errors on inner pages 90% of the time, server-level file overrides, corrupt databases, complex reverse proxies, and stubborn multisite configuration failures can take hours to isolate if you don't work with server configurations daily.
If you've tried saving your permalinks, rebuilt your .htaccess file, verified server directives, and still find yourself staring at 404 errors across your site, let an expert fix it safely without taking your site down.
At Mend, our senior WordPress engineers diagnose and repair site routing issues quickly on a backup-first workflow. If you need immediate expert help restoring your site, submit a Quick Fix request or start with a free diagnosis through Mend's free Diagnosis service to get a plain-English explanation and flat upfront quote with zero risk.
### FAQ
**Q: Why do plain URLs like ?p=123 work when custom permalinks show 404?**
A: Plain URLs bypass server-level rewrite rules entirely by feeding the database query parameter directly to index.php. Custom "pretty" permalinks rely on .htaccess or Nginx rewrite directives to translate the human-readable slug back into a database query.
**Q: Will saving my permalinks cause any downtime or break existing links?**
A: No. Clicking "Save Changes" under Settings > Permalinks simply forces WordPress to flush its internal rewrite cache and update the .htaccess routing rules. It will not delete content or change your established page structures.
**Q: Why did all my WordPress pages give 404 errors after moving to a new host?**
A: Site migrations often leave out hidden files like .htaccess, or the new host may use Nginx instead of Apache without having standard URL rewrite rules configured in the server block.
**Q: How do file permissions affect WordPress 404 permalink errors?**
A: If the .htaccess file has incorrect permissions (such as being locked as read-only by root), WordPress cannot write essential routing instructions to it when you update site settings, leaving the server unable to route inner page requests.
## How to Regain WordPress Admin Access When You're Locked Out
(https://wpmend.com/blog/regain-wordpress-admin-access-locked-out)
Published 2026-08-25 · Security
To regain WordPress admin access when traditional login and password resets fail, you must bypass the standard login interface using backend file or database access. The fastest and safest method is creating a temporary administrator user by adding a code snippet to your active theme’s functions.php file via FTP or cPanel File Manager, or by editing user tables directly inside phpMyAdmin.
Being locked out of your own WordPress website is frustrating, alarming, and surprisingly common. Whether a security plugin blocked your IP address, a password reset email never arrived, or a broken code snippet wiped out user roles, losing dashboard access halts updates, content management, and business operations. Fortunately, as long as you have server access through your web hosting account or FTP, you can always recover control.
Symptoms of a WordPress Admin Lockout
Admin lockouts present differently depending on the underlying failure point. Identifying your exact symptom helps pinpoint the right recovery strategy quickly:
Endless Login Redirect Loop: Entering correct credentials simply reloads the login page without displaying an explicit error message.
Security Plugin Access Denied: Pages display "403 Forbidden," "Too Many Failed Attempts," or an explicit lock screen generated by plugins like iThemes Security, Wordfence, or Solid Security.
Password Reset Email Not Arriving: Clicking "Lost your password?" indicates an email was sent, but the notification never arrives in your inbox or spam folder.
"Sorry, you are not allowed to access this page": You log in successfully, but WordPress blocks access to admin screens due to corrupted user roles or capabilities.
White Screen on /wp-admin: Attempting to load the login page yields a completely blank screen or a generic critical error message.
Likely Causes Behind Admin Lockouts
Before modifying files or database entries, understanding why the lockout happened helps prevent recurring issues once access is restored:
Failed Authentication Limits: Security tools automatically block IP addresses after multiple incorrect password attempts or automated brute-force attacks.
Two-Factor Authentication (2FA) Failures: Lost phones, reset authenticator apps, or misconfigured SMS gateways render standard 2FA prompts unpassable.
Corrupted .htaccess or Site URLs: Unintentional edits to site URLs inside administrative settings break redirect routes between http and https.
Database Corruption: Damaged database tables can clear the wp_user_roles capability array, rendering legitimate administrator accounts powerless.
PHP Mailer Misconfigurations: Web servers lacking transactional email routing fail to deliver password reset tokens.
Step 0: Always Create a Backup First
When executing manual backdoors or directly editing database tables, precision is crucial. A syntax error in PHP or an unintended SQL query can take down the entire site front-end.
Before proceeding with any fix, access your web hosting control panel (cPanel, Plesk, or host dashboard) and export a database backup (.sql file) alongside a full backup of your wp-content directory.
Fix 1: Create an Emergency Admin User via functions.php
If you have FTP credentials or access to your web host's File Manager, you can force WordPress to generate a new administrator account automatically when any visitor loads the website.
Step 1: Access Your Theme Files
Connect to your web server using an FTP client (like FileZilla) or open your host’s File Manager.
Navigate to /wp-content/themes/your-active-theme/.
Locate the functions.php file and download a copy to your computer as a backup.
Step 2: Add the Emergency User Code
Open functions.php in a plain text editor (such as VS Code or Notepad) and paste the following snippet at the very bottom of the file:
function mend_create_emergency_admin() {
$user = 'tempadmin';
$pass = 'ChangeMeNow!2026#';
$email = 'admin-recovery@example.com';
if ( ! username_exists( $user ) && ! email_exists( $email ) ) {
$user_id = wp_create_user( $user, $pass, $email );
$user_obj = new WP_User( $user_id );
$user_obj->set_role( 'administrator' );
}
}
add_action( 'init', 'mend_create_emergency_admin' );
Step 3: Trigger Execution and Log In
Save the modified functions.php file and upload it back to your server.
Visit your main site URL in an incognito or private browser window. Loading any page executes the code and registers the user.
Navigate to example.com/wp-admin and log in using the temporary username (tempadmin) and password (ChangeMeNow!2026#).
Crucial Step: Once logged in, remove the snippet from functions.php immediately. Leaving active account creation code in production poses a massive security vulnerability.
Fix 2: Add a New Admin User Directly via phpMyAdmin
When files cannot be edited or execution hooks fail, creating a user directly within the MySQL database bypassed WordPress internal application logic altogether.
Step 1: Open phpMyAdmin
Log into your web hosting control panel and locate phpMyAdmin. Select your site's database from the left-hand menu.
Step 2: Execute SQL Query
Click on the SQL tab at the top menu bar. Copy and paste the following queries into the command box. Note: If your database uses a custom prefix instead of default wp_, replace wp_ with your custom prefix (e.g., wp_a1b2c_).
INSERT INTO `wp_users` (`user_login`, `user_pass`, `user_nicename`, `user_email`, `user_url`, `user_registered`, `user_activation_key`, `user_status`, `display_name`)
VALUES ('dbadmin', MD5('StrongPassword123!'), 'dbadmin', 'dbadmin@example.com', '', NOW(), '', 0, 'DB Admin');
INSERT INTO `wp_usermeta` (`user_id`, `meta_key`, `meta_value`)
VALUES (LAST_INSERT_ID(), 'wp_capabilities', 'a:1:{s:13:"administrator";b:1;}');
INSERT INTO `wp_usermeta` (`user_id`, `meta_key`, `meta_value`)
VALUES (LAST_INSERT_ID(), 'wp_user_level', '10');
Click Go to execute the query. You can now log into /wp-admin with username dbadmin and password StrongPassword123!.
Fix 3: Disable Security Plugins and 2FA Lockouts
If you know your password but are blocked by an IP firewall or broken 2FA prompt, temporarily disabling the responsible plugin restores immediate access.
Method A: Rename the Plugin Folder via FTP
Open FTP or host File Manager and navigate to /wp-content/plugins/.
Locate the folder belonging to your security or 2FA plugin (e.g., wordfence, iThemes-security-pro, or two-factor).
Rename the directory by appending -disabled to the end (e.g., wordfence-disabled).
WordPress automatically deactivates any plugin whose directory name changes, clearing firewalls and authentication gates instantly.
Method B: Clear Security Locks via WP-CLI
If your host provides Command Line (SSH) access, execute WP-CLI commands to manage plugins and users instantly without web interfaces:
# List installed plugins
wp plugin list
# Deactivate a troublesome security plugin
wp plugin deactivate wordfence
# Reset password for primary admin user
wp user update admin_username --user_pass="NewSecurePass123!"
For more details on resolving specific system lockouts, consult our complete guide on recovering locked out WordPress admin access.
Fix 4: Correct Mismatched Site and Home URLs
If changing domain settings or migrating to SSL causes a login redirect loop, force hardcoded site URLs via wp-config.php.
Connect via FTP and open wp-config.php located in your root directory.
Add these two lines near the top of the file, right after the opening
While this file exists, WordPress intercepts every visitor request and displays the maintenance notice to prevent users from interacting with the site while files are being overwritten or database schemas are being updated.
Under normal conditions, WordPress completes the update and automatically deletes the .maintenance file within a few seconds. However, the site gets stuck in maintenance mode if the update process is interrupted before the cleanup step can run. Common triggers include:
Browser tab closed prematurely: Navigating away or closing the browser window while an update is actively downloading or unpacking.
PHP timeout errors: The server's max_execution_time limit was reached during a heavy update, causing the script to terminate abruptly.
Memory limit exhaustion: The site exceeded its allocated PHP memory limit while extracting update archives.
Plugin or theme compatibility conflicts: A fatal error occurred midway through an update, halting script execution before WordPress could remove the file.
Bulk updating too many items at once: Triggering updates for a dozen plugins simultaneously can easily overload shared hosting resources.
Step-by-Step: How to Get Your Site Out of Maintenance Mode
Follow these steps in order. Step 1 resolves the lock in over 90% of cases.
Step 1: Delete the .maintenance File via File Manager or FTP
Before making any changes to your server, ensure you have access to your hosting dashboard or FTP credentials. Always maintain a recent backup of your site before running updates or performing server maintenance.
Log in to your hosting account: Open your web host's control panel (such as cPanel, Plesk, or a custom host dashboard like SiteGround, Kinsta, or WP Engine).
Open File Manager: Navigate to the File Manager tool and open the root directory of your WordPress installation. This directory is usually named public_html, www, htdocs, or your domain name.
Enable hidden files: The .maintenance file starts with a dot, which means it is a hidden system file. In cPanel, click Settings in the top-right corner and check Show Hidden Files (dotfiles). In FTP clients like FileZilla, choose Server > Force showing hidden files from the top menu.
Locate and delete the file: Look for the file named .maintenance in the root folder (alongside folders like wp-admin, wp-content, and files like wp-config.php). Right-click the file and select Delete.
If you prefer using SFTP or SSH, connect to your server and run the following command inside your web root directory:
rm .maintenance
Once deleted, refresh your website in an incognito window. Your site should immediately return to normal operation.
Step 2: Clear Server, CDN, and Browser Caches
If you deleted the .maintenance file but the message still appears, your web server, caching plugin, or Content Delivery Network (CDN) may be serving a cached copy of the maintenance page.
Clear CDN cache: If you use Cloudflare, Sucuri, or a built-in hosting CDN, log in to your dashboard and purge the cache completely.
Purge object and page cache: Flush server-level caches like Redis, Varnish, or NGINX fastcgi cache through your hosting control panel.
Hard refresh your browser: Press Ctrl + F5 (Windows) or Cmd + Shift + R (Mac) to bypass local browser caching.
Step 3: Clear the Maintenance Lock via WP-CLI (For Advanced Users)
If you have SSH access to your server and WP-CLI installed, you can check and toggle maintenance mode directly from the command line without searching for files:
# Check current maintenance mode status
wp maintenance-mode status
# Deactivate maintenance mode
wp maintenance-mode deactivate
WP-CLI will safely remove the flag file and clear internal state checks in a single command.
What to Do After Removing the .maintenance File
Deleting the file fixes the symptom, but you still need to verify whether the original update actually completed successfully.
1. Check for Unfinished Updates
Log in to your WordPress admin dashboard and navigate to Dashboard > Updates. If an update was interrupted, the plugin, theme, or core files may be partially overwritten or outdated. Re-run any updates that failed, updating one item at a time.
2. Handle Potential Fatal Errors or White Screens
If removing the maintenance file results in a PHP fatal error or a blank screen, an interrupted update may have left corrupted plugin or theme files on your server. If your site displays a critical error notification, refer to our guide on how to fix a WordPress site that broke after an update or follow our troubleshooting steps for the WordPress critical error screen.
If a specific plugin update failed halfway through, you can safely manually replace its files via FTP or follow our step-by-step guide on how to downgrade a WordPress plugin or theme safely to restore a known working version.
How to Prevent WordPress from Getting Stuck in Maintenance Mode
Preventing maintenance locks comes down to maintaining server stability and following safe update practices:
Best Practice
Why It Helps
Update plugins individually
Bulk updates strain PHP memory and execution time limits, increasing the risk of script timeouts.
Increase PHP execution limits
Higher max_execution_time (e.g., 60–120 seconds) gives large updates time to download and extract.
Keep browser window open
Ensures the background AJAX request finishing the update cycle receives the completion response.
Increase PHP memory limit
Adding define('WP_MEMORY_LIMIT', '256M'); to wp-config.php prevents out-of-memory crashes.
Use staging environments
Testing major plugin or core updates on staging prevents front-end downtime on live sites.
When to Call a Professional
While removing a .maintenance file takes only a minute when you have file access, deeper host configurations or broken database migrations can cause recurring failures. You should consult a senior WordPress engineer if:
Deleting .maintenance immediately brings up a blank page or unrecoverable PHP error across your dashboard and front-end.
The site repeatedly drops back into maintenance mode every time an automatic background update runs.
You do not have FTP, SSH, or host control panel access to remove the file yourself.
An interrupted core update corrupted your database, leaving administrative tables damaged.
If you are stuck or need your site restored right now without risking data loss, let our team handle it. With the Mend Quick Fix, a senior WordPress engineer will diagnose the underlying crash, clean up broken updates, and get your site back online fast for a flat fee — backed by a fixed, or your money back guarantee.
Unsure what caused the crash? Request a free diagnosis and we will review your site logs and send a plain-English repair plan before any work begins.
## Eliminate Render-Blocking Resources Without Breaking WordPress
(https://wpmend.com/blog/eliminate-render-blocking-resources-wordpress)
Published 2026-08-23 · Performance
To eliminate render-blocking resources in WordPress, you must defer non-critical JavaScript using the defer or async attributes and inline your critical CSS while loading non-critical stylesheets asynchronously. Doing this prevents the browser from pausing page rendering while downloading external files, directly improving your First Contentful Paint (FCP) and Largest Contentful Paint (LCP) scores. However, applying these optimizations improperly can cause broken mobile navigation, broken sliders, or a Flash of Unstyled Content (FOUC).
What Are Render-Blocking Resources in WordPress?
When a visitor opens a page on your WordPress site, the browser parses the HTML code from top to bottom. Whenever it encounters a link to an external CSS stylesheet () or a JavaScript file (