<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: WP Multitool</title>
    <description>The latest articles on DEV Community by WP Multitool (@wpmultitool).</description>
    <link>https://dev.to/wpmultitool</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3789072%2Fc09bc813-ee4e-48e4-87c1-f277e9f2aacf.png</url>
      <title>DEV Community: WP Multitool</title>
      <link>https://dev.to/wpmultitool</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/wpmultitool"/>
    <language>en</language>
    <item>
      <title>Which of Your Plugins Is the Heaviest? Now You Can See It on the Plugins Page.</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Thu, 18 Jun 2026 08:15:11 +0000</pubDate>
      <link>https://dev.to/wpmultitool/which-of-your-plugins-is-the-heaviest-now-you-can-see-it-on-the-plugins-page-126</link>
      <guid>https://dev.to/wpmultitool/which-of-your-plugins-is-the-heaviest-now-you-can-see-it-on-the-plugins-page-126</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://wpmultitool.com/2026/04/08/plugin-performance-score/" rel="noopener noreferrer"&gt;https://wpmultitool.com/2026/04/08/plugin-performance-score/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New in WP Multitool 1.1.19&lt;/strong&gt; – Plugin Performance Score is the newest module in WP Multitool. It adds real benchmark data to your WordPress Plugins page so you can see exactly which plugins are the heaviest. Here’s what it does and why it matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Every WordPress developer has had this moment
&lt;/h2&gt;

&lt;p&gt;The site is slow, you open Query Monitor, and you see 180 database queries. But which plugin is responsible for most of them?&lt;/p&gt;

&lt;p&gt;Query Monitor tells you what happened during a single page load. It’s a debugger – and QM4 just made that debugger a lot better with a new timeline view and client-side rendering. But it still doesn’t answer the fundamental question: is this plugin heavy in general, or just heavy on this particular page?&lt;/p&gt;

&lt;p&gt;That’s two different problems. And nobody was solving the first one with real data.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with guessing
&lt;/h2&gt;

&lt;p&gt;When I help people &lt;a href="https://dev.to/blog/replaced-6-wordpress-plugins-with-one/"&gt;audit their plugin stacks&lt;/a&gt;, the conversation usually goes like this: “I think Elementor is heavy.” “I heard Jetpack is a resource hog.” “Someone on Reddit said WooCommerce adds 70 queries.”&lt;/p&gt;

&lt;p&gt;Some of those are right. Some are outdated. And most people don’t have time to benchmark every plugin themselves. They just install stuff and hope for the best.&lt;/p&gt;

&lt;p&gt;What if you could see each plugin’s performance impact right on the Plugins page? Not based on opinions – based on actual measurements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plugin Performance Score
&lt;/h2&gt;

&lt;p&gt;The Performance column on the Plugins page – every plugin gets a score based on real benchmark data.&lt;br&gt;
That’s what the new module in WP Multitool 1.1.19 does. It adds a Performance column to your WordPress Plugins page showing three things for each installed plugin:&lt;/p&gt;

&lt;p&gt;A score from 0 to 100&lt;br&gt;
PHP memory usage&lt;br&gt;
Number of database queries&lt;/p&gt;

&lt;p&gt;The data comes from &lt;a href="https://makewpfast.com" rel="noopener noreferrer"&gt;makewpfast.com&lt;/a&gt;, where we benchmark plugins in isolated Docker containers. No caching, no interference from other plugins, just a clean WordPress install with one plugin active at a time. We measure memory and queries, then calculate a score.&lt;/p&gt;

&lt;p&gt;Here’s what it looks like for some plugins you probably have installed:&lt;/p&gt;

&lt;p&gt;Plugin&lt;br&gt;
Score&lt;br&gt;
Memory&lt;br&gt;
Queries&lt;/p&gt;

&lt;p&gt;Akismet&lt;br&gt;
92&lt;br&gt;
4 MB&lt;br&gt;
5&lt;/p&gt;

&lt;p&gt;Contact Form 7&lt;br&gt;
82&lt;br&gt;
6 MB&lt;br&gt;
5&lt;/p&gt;

&lt;p&gt;Jetpack&lt;br&gt;
71&lt;br&gt;
6 MB&lt;br&gt;
9&lt;/p&gt;

&lt;p&gt;Elementor&lt;br&gt;
50&lt;br&gt;
6 MB&lt;br&gt;
42&lt;/p&gt;

&lt;p&gt;WooCommerce&lt;br&gt;
26&lt;br&gt;
16 MB&lt;br&gt;
70&lt;/p&gt;

&lt;p&gt;No surprises for the extremes – WooCommerce is heavy, Akismet is light. But the middle is interesting. Jetpack scores lower than Contact Form 7 even though both use 6 MB of memory, because Jetpack runs nearly twice the queries. The score reflects that.&lt;/p&gt;

&lt;h2&gt;
  
  
  How scoring works
&lt;/h2&gt;

&lt;p&gt;I didn’t want the score to be some black box number. It’s a formula you can verify yourself.&lt;/p&gt;

&lt;p&gt;The baseline is a clean WordPress install – about 4 MB memory and 4 database queries. Everything above that is overhead. The formula uses a logarithmic scale, which means the first 10 extra queries hurt your score more than going from 100 to 110. That makes sense intuitively – if your plugin adds 10 queries to a minimal site, that’s a big deal. If it adds 10 more on top of 100, that’s noise.&lt;/p&gt;

&lt;p&gt;Two important properties: the score is deterministic (same memory and queries always produce the same number), and it doesn’t change when we add new plugins to the database. If a future plugin uses 50 MB and 300 queries, it’ll score 0 – but WooCommerce stays at 26. No one else’s score shifts.&lt;/p&gt;

&lt;p&gt;We have data for about 5,000 plugins. If yours isn’t in there, you’ll see a dash instead of a score. We’re working on expanding coverage.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do with this information
&lt;/h2&gt;

&lt;p&gt;The score isn’t telling you to uninstall WooCommerce. If you run a store, you need it. But it does tell you where to focus your optimization effort.&lt;/p&gt;

&lt;p&gt;If you see a plugin scoring below 50 and you’re not sure you need it – that’s a conversation worth having. If you see three plugins in the 60-70 range doing similar things, maybe it’s time to &lt;a href="https://dev.to/blog/replaced-6-wordpress-plugins-with-one/"&gt;consolidate&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And if your site has &lt;a href="https://dev.to/blog/wp-options-autoload-trap/"&gt;autoload bloat&lt;/a&gt;, the heaviest plugins are usually the biggest contributors. Now you can see that connection at a glance instead of guessing.&lt;/p&gt;

&lt;p&gt;The module loads the benchmark data from a static file bundled with the plugin. No external API calls, no performance impact on your site. It’s about 220 KB and gets cached by PHP’s opcache after the first load. The column only appears on the Plugins page – it doesn’t touch your frontend or any other admin page.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Plugin Performance Score ships with WP Multitool 1.1.19, enabled by default. Install the plugin, go to your Plugins page, and the Performance column is there.&lt;/p&gt;

&lt;p&gt;Click any score badge to see the full benchmark report on &lt;a href="https://makewpfast.com" rel="noopener noreferrer"&gt;makewpfast.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is one of 14 modules included. &lt;a href="https://buy.polar.sh/polar_cl_MCoJc7inAAMEWSEj4xTNaYDhuRIKxdg7w72ZD4N9xVp" rel="noopener noreferrer"&gt;Get WP Multitool – $199/year&lt;/a&gt;&lt;/p&gt;

</description>
      <category>monitoring</category>
      <category>performance</category>
      <category>tooling</category>
      <category>wordpress</category>
    </item>
    <item>
      <title>WP Multitool 1.1.20: Action Scheduler + Image Analysis</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Thu, 18 Jun 2026 08:15:09 +0000</pubDate>
      <link>https://dev.to/wpmultitool/wp-multitool-1120-action-scheduler-image-analysis-1791</link>
      <guid>https://dev.to/wpmultitool/wp-multitool-1120-action-scheduler-image-analysis-1791</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://wpmultitool.com/2026/04/23/wp-multitool-1-1-20-action-scheduler-image-analysis/" rel="noopener noreferrer"&gt;https://wpmultitool.com/2026/04/23/wp-multitool-1-1-20-action-scheduler-image-analysis/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Published April 22, 2026 · WP Multitool 1.1.20&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;WP Multitool 1.1.20 ships two new modules: Action Scheduler Optimizer and smarter Image Size Analysis. If you run WooCommerce, the first one solves a problem you probably have right now. The second can cut your upload time in half by killing image sizes WordPress generates but never uses. Plus 9 targeted bug fixes.&lt;/p&gt;

&lt;p&gt;Here’s what’s new and why it matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Action Scheduler Optimizer
&lt;/h2&gt;

&lt;p&gt;If your site runs WooCommerce, you have an Action Scheduler table. It grows silently in the background — processing order emails, syncing inventory, firing scheduled hooks. On busy stores, it grows to millions of rows. The table gets slower. Every page request that needs to check the queue takes longer. Your database server strains under the weight of data that should have been cleaned months ago.&lt;/p&gt;

&lt;p&gt;Most site owners don’t find out until something breaks. A backup fails because the database dump is 4GB. A database query times out. WP-CLI’s &lt;code&gt;action-scheduler status&lt;/code&gt; returns a number you weren’t expecting.&lt;/p&gt;

&lt;p&gt;The new Action Scheduler Optimizer module gives you a dashboard for the queue — and the tools to fix it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the module shows you
&lt;/h3&gt;

&lt;p&gt;The dashboard surfaces five numbers immediately: total actions, pending count, failed actions, past-due items, and current processing rate (actions per hour). Below that, a full status breakdown by state — Complete, Cancelled, In Progress, Failed, Past-Due, Stuck — with the oldest action’s age for each group.&lt;/p&gt;

&lt;p&gt;The recommendations panel flags issues automatically. If you have past-due actions piling up — a classic sign that the queue runner isn’t keeping up — it tells you exactly what’s happening and suggests a fix.&lt;/p&gt;

&lt;h3&gt;
  
  
  Cleanup tools
&lt;/h3&gt;

&lt;p&gt;The Cleanup section shows what’s eligible for deletion, grouped by type and age. Completed actions, failed actions, logs, orphaned entries — each with counts based on your configured retention periods. You see the counts before you delete anything.&lt;/p&gt;

&lt;p&gt;Three cleanup modes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Purge&lt;/strong&gt; — removes old completed and cancelled actions based on your retention settings&lt;br&gt;
&lt;strong&gt;Optimize Tables&lt;/strong&gt; — runs OPTIMIZE TABLE on Action Scheduler tables to reclaim disk space after bulk deletions&lt;br&gt;
&lt;strong&gt;Nuclear Clean&lt;/strong&gt; — wipes all non-pending actions. For sites where the queue has gotten completely out of hand. Requires typing a confirmation phrase.&lt;/p&gt;

&lt;h3&gt;
  
  
  Performance Tuner
&lt;/h3&gt;

&lt;p&gt;The tuner exposes Action Scheduler’s runtime settings — the ones that are usually buried in code or require a developer to change. Batch size, time limit, concurrent batches, lock timeout. Each setting shows the current value, the default, and a number field you can adjust directly from the admin.&lt;/p&gt;

&lt;p&gt;For most WooCommerce sites, the defaults are fine. For high-volume stores processing thousands of orders per day, being able to increase batch size or concurrent batches without touching code is genuinely useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Auto-Cleanup cron
&lt;/h3&gt;

&lt;p&gt;Set it and forget it. Enable auto-cleanup and configure retention periods: how many days to keep completed, failed, cancelled, and log entries. By default the cron runs every 6 hours — configurable to hourly, every 12 hours, or daily. The queue stays manageable without manual intervention.&lt;/p&gt;

&lt;h3&gt;
  
  
  Top Hooks table
&lt;/h3&gt;

&lt;p&gt;At the bottom of the page: a breakdown of action hooks by total count, pending, complete, and failed. This is how you find which WooCommerce process (or third-party plugin) is generating the most queue load. If one hook has 50,000 entries and everything else has under 100, that’s your culprit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Action Scheduler Optimizer is available in both the Lite edition ($9) and the full Pro version.&lt;/strong&gt; If you’re on WooCommerce and haven’t tried WP Multitool yet, &lt;a href="https://wpmultitool.com/#pricing" rel="noopener noreferrer"&gt;the Lite edition ($9) includes this module&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Image Manager: Size Analysis
&lt;/h2&gt;

&lt;p&gt;WordPress generates multiple size variants for every image you upload. Thumbnail, medium, large, medium-large — that’s the default set. Themes add their own. Plugins add theirs. WooCommerce adds product image sizes. Page builders add responsive breakpoints.&lt;/p&gt;

&lt;p&gt;By the time you’ve been running a site for a year, you might have 15–20 registered image sizes. Half of them may never appear in any post or template. The other half might be duplicates of each other with different names but identical dimensions.&lt;/p&gt;

&lt;p&gt;The Image Manager already lets you disable sizes and regenerate thumbnails. Version 1.1.20 adds a smart analysis tool: &lt;strong&gt;Find Sizes to Disable&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the analysis does
&lt;/h3&gt;

&lt;p&gt;Click the button and the analyzer scans your registered image sizes against two criteria:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duplicates&lt;/strong&gt; — sizes with identical or near-identical dimensions. The analysis flags them and identifies which is the “original” that other sizes duplicate. Keeping both wastes disk space on every image upload.&lt;br&gt;
&lt;strong&gt;Unused&lt;/strong&gt; — sizes that have zero actual image files generated, or that don’t appear in your content or theme templates. These are registered but never used. Disabling them stops WordPress from generating them on future uploads.&lt;/p&gt;

&lt;p&gt;Each flagged size shows why it’s flagged (DUPLICATE or UNUSED badge), what it’s a duplicate of, and how many image files exist for it. You can disable it directly from the analysis results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this matters
&lt;/h3&gt;

&lt;p&gt;Every active image size means WordPress generates an extra file on every image upload. A site with 20 registered sizes generates 20 files per upload. Cut it to 10 and you halve the upload time, disk usage, and backup size for new images.&lt;/p&gt;

&lt;p&gt;The analysis doesn’t remove existing files — it prevents new ones from being generated. For cleanup of existing files, the Image Manager’s existing disable-and-delete workflow handles that.&lt;/p&gt;

&lt;h2&gt;
  
  
  9 Bug Fixes
&lt;/h2&gt;

&lt;p&gt;This release includes 9 fixes from a systematic code review across the Action Scheduler Optimizer and Image Manager modules. Some highlights:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Critical:&lt;/strong&gt; Action Scheduler stats showed 0 rows — TABLE_ROWS/DATA_LENGTH case mismatch in the analyzer. Fixed.&lt;br&gt;
&lt;strong&gt;Critical:&lt;/strong&gt; Image size unused scan could miss results on sites with large image libraries — added &lt;code&gt;group_concat_max_len=10MB&lt;/code&gt; before the scan query.&lt;br&gt;
&lt;strong&gt;Critical:&lt;/strong&gt; Cleanup with retention set to 0 days previously deleted everything instead of treating 0 as “disabled.” Fixed — 0 now means skip that type.&lt;br&gt;
&lt;strong&gt;High:&lt;/strong&gt; Disk usage scanning used an O(N²) loop per image. Replaced with a single-pass cached result.&lt;/p&gt;

&lt;p&gt;Remaining fixes cover a missing capability check, an unbounded UPDATE query in the queue runner, and legacy use of &lt;code&gt;global $screen&lt;/code&gt;. No new features — just problems that shouldn’t have been there.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Update
&lt;/h2&gt;

&lt;p&gt;If you’re on the Yearly or Lifetime plan, the download is available in your Polar account. If you bought through the plugin dashboard, the update appears in WordPress → Plugins automatically.&lt;/p&gt;

&lt;p&gt;The Lite edition ($9) doesn’t include Image Manager with Size Analysis (Pro module), but Action Scheduler Optimizer and the bug fixes are available in Lite. If you’ve been meaning to upgrade: the &lt;a href="https://wpmultitool.com/#pricing" rel="noopener noreferrer"&gt;$499 lifetime license&lt;/a&gt; covers all current and future modules — no annual renewal.&lt;/p&gt;

&lt;p&gt;As always: test on staging before updating production. The update takes 30 seconds. The testing should take longer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get WP Multitool&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://wpmultitool.com/#pricing" rel="noopener noreferrer"&gt;Lite Edition ($9)&lt;/a&gt; — includes Action Scheduler Optimizer, Database Optimizer, Frontend Optimizer, and more&lt;br&gt;
&lt;a href="https://wpmultitool.com/#pricing" rel="noopener noreferrer"&gt;Pro Yearly — $199/yr&lt;/a&gt; — all 13 modules including Image Manager, Slow Query AI Analyzer, Config Manager&lt;br&gt;
&lt;a href="https://wpmultitool.com/#pricing" rel="noopener noreferrer"&gt;Lifetime — $499 one-time&lt;/a&gt; — everything, forever, no renewals&lt;/p&gt;

&lt;p&gt;Not sure if it’s worth it? The &lt;a href="https://wpmultitool.com/do-you-really-need-6-wordpress-plugins-for-performance/" rel="noopener noreferrer"&gt;6-plugin problem post&lt;/a&gt; explains what WP Multitool replaces and why one tool beats six.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Tools I Actually Use and Recommend</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Wed, 17 Jun 2026 08:29:54 +0000</pubDate>
      <link>https://dev.to/wpmultitool/tools-i-actually-use-and-recommend-3de1</link>
      <guid>https://dev.to/wpmultitool/tools-i-actually-use-and-recommend-3de1</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://wpmultitool.com/2026/04/10/tools-i-actually-use-and-recommend/" rel="noopener noreferrer"&gt;https://wpmultitool.com/2026/04/10/tools-i-actually-use-and-recommend/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every “best tools” list on the internet is the same. Someone ranks 47 tools they’ve never used, stuffs affiliate links into every paragraph, and calls it a “definitive guide.” You read it, learn nothing, and close the tab.&lt;/p&gt;

&lt;p&gt;This is not that.&lt;/p&gt;

&lt;p&gt;These are tools I actually use, have tested, or genuinely think are worth your time. No affiliate links. No rankings. No “best of 2026” nonsense. Just honest takes from someone who builds WordPress sites and SaaS products for a living.&lt;/p&gt;

&lt;p&gt;I’ll keep updating this list as I find new things worth recommending. Think of it as a living document – if something stops being good, it comes off the list.&lt;/p&gt;

&lt;h2&gt;
  
  
  WP Multitool
&lt;/h2&gt;

&lt;p&gt;Ok, I’m putting my own tool first because I’m biased and I’m not going to pretend otherwise. &lt;a href="https://wpmultitool.com" rel="noopener noreferrer"&gt;WP Multitool&lt;/a&gt; is a WordPress optimization plugin I built because I was tired of installing 6 different plugins just to keep a site healthy.&lt;/p&gt;

&lt;p&gt;It does slow query analysis, autoload optimization, database cleanup, plugin performance scoring, and a bunch of other things that used to require separate tools. One plugin instead of six. That’s the whole pitch.&lt;/p&gt;

&lt;p&gt;Is it perfect? No. I’m still actively developing it. But it solves real problems I kept running into on client sites, and now it solves them in one place. If you’re managing WordPress sites and constantly juggling performance plugins – take a look.&lt;/p&gt;

&lt;h2&gt;
  
  
  wp-loc
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://github.com/MarcinDudekDev/wp-loc" rel="noopener noreferrer"&gt;wp-loc&lt;/a&gt; because setting up local WordPress environments shouldn’t require a PhD in Docker networking. One command – &lt;code&gt;wp-test create mysite.loc&lt;/code&gt; – and you get a fully working WordPress install with SSL, WP-CLI, Redis, and proper database setup. No clicking through wizards, no GUI apps eating your RAM in the background.&lt;/p&gt;

&lt;p&gt;It’s Docker-based, so each site is completely isolated. You can run multiple sites at once, migrate from remote servers, manage databases – all from the terminal. It handles the annoying stuff automatically: SSL certificates, port conflicts with MAMP, DNS routing to .loc domains.&lt;/p&gt;

&lt;p&gt;If you’re a WordPress developer on macOS who lives in the terminal, this is how local development should work. It’s open source and free.&lt;/p&gt;

&lt;h2&gt;
  
  
  NerdSip
&lt;/h2&gt;

&lt;p&gt;I have a problem. I want to learn new things – AI concepts, business strategy, random technical topics – but I don’t have time to sit through a 4-hour Udemy course. And honestly, most of what I want to learn doesn’t need 4 hours. I just need the key concepts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://nerdsip.com" rel="noopener noreferrer"&gt;NerdSip&lt;/a&gt; solves exactly that. You pick a topic – literally anything – and it generates a 5-minute micro-course with 7 bite-sized lessons, quizzes, and infographics. The whole thing was built by two physicists, which probably explains why the content structure actually makes sense.&lt;/p&gt;

&lt;p&gt;What I like about it: you can learn something useful in the time it takes to drink a coffee. Instead of scrolling Twitter for 10 minutes, you actually come away knowing something new. The free tier gives you 2 courses per day, which is honestly enough for most people. There’s a Plus plan at €4.99/month if you want more. Works on both iOS and Android.&lt;/p&gt;

&lt;p&gt;Is it going to replace a proper deep-dive course? No. But for staying sharp across different topics without committing your entire evening – it’s genuinely useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  LandingBoost
&lt;/h2&gt;

&lt;p&gt;Here’s the thing about building landing pages – most of us WordPress developers are decent at the technical side but not exactly conversion rate optimization experts. You build a page, it looks good, you publish it, and then… you hope for the best?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://landingboost.app/" rel="noopener noreferrer"&gt;LandingBoost&lt;/a&gt; is a free AI-powered landing page analyzer. You paste your URL, wait about 60 seconds, and get a conversion score with specific feedback on what’s working and what isn’t. That’s it. No signup wall, no “book a demo” nonsense.&lt;/p&gt;

&lt;p&gt;I find it especially useful when I’m building landing pages for side projects or client sites and want a quick sanity check before going live. It catches things you stop noticing after staring at the same page for hours – weak CTAs, missing trust signals, confusing layouts. Think of it as a second pair of eyes that actually knows something about conversions. If you want to see how it holds up in practice, Bob’s Tech Review put together a &lt;a href="https://bobstechreview.com/marketing-sales-growth/landing-boost" rel="noopener noreferrer"&gt;detailed hands-on review&lt;/a&gt; that walks through the scoring on real pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does My Site Suck?
&lt;/h2&gt;

&lt;p&gt;This one’s also mine, and it scratches a different itch than LandingBoost. Where LandingBoost looks at how well a single page converts, &lt;a href="https://whydoesmysitesuck.com/" rel="noopener noreferrer"&gt;Why Does My Site Suck?&lt;/a&gt; runs a whole-site sanity check – 330 automated checks that score your URL from 0 to 100 across SEO, performance, security, accessibility, and AI/LLM visibility.&lt;/p&gt;

&lt;p&gt;It’s free and there’s no signup. You paste a URL, wait a bit, and get a blunt breakdown of what’s broken and what to fix first. I use it as a quick gut-check before handing a site to a client, or when I just want to know whether a site is fundamentally healthy before digging into the details. It won’t replace a proper manual audit, but it catches the obvious stuff fast – and it pairs nicely with LandingBoost when you want both the whole-site view and the page-level conversion read.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s next
&lt;/h2&gt;

&lt;p&gt;Like I said, this is a living list. I’ll add new tools as I discover them and remove anything that stops being worth it. If you’re building something useful for WordPress developers or indie makers and think it belongs here – &lt;a href="https://wpmultitool.com/contact/" rel="noopener noreferrer"&gt;let me know&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>tools</category>
    </item>
    <item>
      <title>WP Multitool 1.2.0: Updates Now Come To You</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Wed, 17 Jun 2026 08:15:14 +0000</pubDate>
      <link>https://dev.to/wpmultitool/wp-multitool-120-updates-now-come-to-you-51ff</link>
      <guid>https://dev.to/wpmultitool/wp-multitool-120-updates-now-come-to-you-51ff</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://wpmultitool.com/2026/05/06/wp-multitool-1-2-0-auto-updates/" rel="noopener noreferrer"&gt;https://wpmultitool.com/2026/05/06/wp-multitool-1-2-0-auto-updates/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Published May 6, 2026 · WP Multitool 1.2.0&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Until today, every release of WP Multitool meant the same chore for our customers. Download the zip from Polar. Go to Plugins, Add New, Upload. Click through “replace existing”. Repeat on every site you maintain.&lt;/p&gt;

&lt;p&gt;That ends with 1.2.0.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;There’s a new module called Auto Updater. You enable it once, paste your license key, and from that point on WP Multitool shows up in WordPress’s normal Updates screen like any other plugin. One click and you’re current.&lt;/p&gt;

&lt;p&gt;Behind the scenes it talks to wpmultitool.com, checks your license, and pulls a signed zip with a 30-minute expiry. If your license gets refunded or revoked, the next check fails and updates stop. No drama, no manual cleanup.&lt;/p&gt;

&lt;p&gt;It’s gated to Pro. Lite skips the whole thing because there’s nothing to license-check.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it took this long
&lt;/h2&gt;

&lt;p&gt;Honest answer? I wanted to ship the plugin first and figure out distribution second. WordPress.org isn’t an option for a paid plugin like this, and the existing third-party update SaaS options either lock you into their stack or charge per-customer fees that don’t make sense at our scale.&lt;/p&gt;

&lt;p&gt;So I built it. The license server is a few REST endpoints in the marketing site theme. The plugin side is one self-contained module that hooks into WordPress’s update transient. About 800 lines of PHP total, both ends combined. No framework, no SaaS dependency, no recurring cost.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real fix for the slow-log table errors
&lt;/h2&gt;

&lt;p&gt;One of you reported that hitting “Repair Setup” in Slow Callback Finder showed this: “Cannot create database table. Check database user permissions.” Their MySQL user actually had CREATE permission. The error was wrong.&lt;/p&gt;

&lt;p&gt;What was happening: the plugin called WordPress’s &lt;code&gt;dbDelta()&lt;/code&gt; to install the table, checked if the table existed afterwards, and if it didn’t, blamed permissions. It never read &lt;code&gt;$wpdb-&amp;amp;gt;last_error&lt;/code&gt;. So the real reason was getting swallowed.&lt;/p&gt;

&lt;p&gt;If you’ve ever fought with &lt;code&gt;dbDelta()&lt;/code&gt;, you know how picky it is. KEY vs INDEX matters. Whitespace matters. It silently fails on some MySQL and MariaDB builds, especially older LiteSpeed stacks. The fact that it works most of the time made the failure mode worse, because nobody questioned it.&lt;/p&gt;

&lt;p&gt;1.2.0 replaces &lt;code&gt;dbDelta()&lt;/code&gt; for the slow-log tables with a small Schema_Manager class. Explicit &lt;code&gt;CREATE TABLE IF NOT EXISTS&lt;/code&gt;. Captures &lt;code&gt;$wpdb-&amp;amp;gt;last_error&lt;/code&gt; after every statement. Falls back through four charsets (utf8mb4_unicode_520_ci, then utf8mb4_unicode_ci, then utf8mb4_general_ci, then plain utf8) and two storage engines (InnoDB, then whatever the server defaults to) before giving up. When it does fail, the error message now contains the actual MySQL error instead of a guess.&lt;/p&gt;

&lt;p&gt;This affects two modules: Slow Callback Finder and Slow Query AI Analyzer. If you ever saw the old error and gave up, try again on 1.2.0.&lt;/p&gt;

&lt;p&gt;One thing I considered along the way was wrapping the install in a transaction. Then I remembered MySQL and MariaDB do an implicit COMMIT before and after every DDL statement, so a transaction around &lt;code&gt;CREATE TABLE&lt;/code&gt; does nothing. If you’ve wondered why other plugins don’t bother, that’s why.&lt;/p&gt;

&lt;p&gt;Tested on fresh installs and on sites with a custom &lt;code&gt;$table_prefix&lt;/code&gt; – the customer’s case was &lt;code&gt;wp_plugins_&lt;/code&gt;. Works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Upgrade no longer hangs during maintenance mode
&lt;/h2&gt;

&lt;p&gt;Smaller one. WordPress briefly drops a &lt;code&gt;.maintenance&lt;/code&gt; file when an update runs. While that file is there, your admin URL serves a “be right back” page. Normally it’s gone in a second.&lt;/p&gt;

&lt;p&gt;The auto-updater was hitting the admin URL during the upgrade to detect the new version, and if maintenance mode lingered (say, because another plugin was updating at the same time) it would wait, then sometimes hang the upgrade entirely.&lt;/p&gt;

&lt;p&gt;1.2.0 checks for the &lt;code&gt;.maintenance&lt;/code&gt; file and the 503 status before doing that refresh, and skips it if it’s there. WordPress finishes the upgrade without the plugin getting in the way.&lt;/p&gt;

&lt;p&gt;Found this dogfooding the auto-updater on a site that had a Yoast update queued at the same time. Felt unhelpful to ship 1.2.0 with the new updater half-broken under real-world conditions, so it got fixed before release.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you should do
&lt;/h2&gt;

&lt;p&gt;If you already own a WP Multitool Pro license:&lt;/p&gt;

&lt;p&gt;Update to 1.2.0 manually one last time (yes, the irony isn’t lost on me).&lt;br&gt;
Go to WP Multitool, Updates.&lt;br&gt;
Paste the license key from your Polar download email.&lt;br&gt;
Done. Future updates will appear in your normal Updates screen.&lt;/p&gt;

&lt;p&gt;If you’re on Lite or you haven’t bought yet, nothing changes for you. Lite stays manual, which is fine because Lite ships rarely.&lt;/p&gt;

&lt;h2&gt;
  
  
  About your license key
&lt;/h2&gt;

&lt;p&gt;Your license key was in the email Polar sent when you bought WP Multitool. If you can’t find that email, the key is also on your Polar dashboard at &lt;a href="https://polar.sh/dashboard/purchases" rel="noopener noreferrer"&gt;polar.sh/dashboard/purchases&lt;/a&gt; – click the WP Multitool order and the key is on the order page.&lt;/p&gt;

&lt;p&gt;Didn’t get the email at all, or the dashboard shows nothing? Send me a note at &lt;a href="mailto:support@wpmultitool.com"&gt;support@wpmultitool.com&lt;/a&gt; and I’ll find your record and resend the key.&lt;/p&gt;

&lt;p&gt;If you hit any rough edge with 1.2.0, reply to the announcement email or open an issue. I read all of them.&lt;/p&gt;

&lt;p&gt;– Marcin&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The WordPress Safety Net You Only Notice When You Need It</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Wed, 17 Jun 2026 08:15:12 +0000</pubDate>
      <link>https://dev.to/wpmultitool/the-wordpress-safety-net-you-only-notice-when-you-need-it-4n2c</link>
      <guid>https://dev.to/wpmultitool/the-wordpress-safety-net-you-only-notice-when-you-need-it-4n2c</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://wpmultitool.com/2026/05/20/wp-multitool-fatal-error-recovery/" rel="noopener noreferrer"&gt;https://wpmultitool.com/2026/05/20/wp-multitool-fatal-error-recovery/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The scenario nobody likes
&lt;/h2&gt;

&lt;p&gt;You’re editing a plugin file in &lt;code&gt;wp-admin/plugin-editor.php&lt;/code&gt;. You’re tired. You forget a semicolon. You hit &lt;strong&gt;Update File&lt;/strong&gt; and the next request white-screens the site. You’re locked out of wp-admin. Your only way back in is… wp-admin.&lt;/p&gt;

&lt;p&gt;If you’ve lived through this, you know the feeling.&lt;/p&gt;

&lt;p&gt;WordPress has had a fix for this since 5.2. It’s called &lt;strong&gt;Recovery Mode&lt;/strong&gt;. Most people don’t know it exists, and even when they do, the default flow has an awkward weakness – it emails you a recovery link from the same site that just broke.&lt;/p&gt;

&lt;p&gt;This post is about what Recovery Mode actually does, why the default flow is awkward, and what WP Multitool changes about it. I’ll also be honest about what it can’t fix. There’s a sudo gate inside WordPress that we don’t bypass on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  What core gives you
&lt;/h2&gt;

&lt;p&gt;When a plugin or theme triggers a fatal error on an admin page, WordPress doesn’t just show the “There has been a critical error on this website” page and give up. It also:&lt;/p&gt;

&lt;p&gt;Notes which extension caused the crash.&lt;br&gt;
Generates a one-time recovery link (a URL with &lt;code&gt;rm_token&lt;/code&gt; and &lt;code&gt;rm_key&lt;/code&gt; params).&lt;br&gt;
&lt;strong&gt;Emails that link to the site’s admin email.&lt;/strong&gt;&lt;br&gt;
When you click the emailed link, WordPress validates the key, drops a recovery cookie, asks you for your password one more time, and finally lets you into a special “Recovery Mode” version of wp-admin where the broken plugin or theme has been paused. It’s still installed, just skipped on every page load until you say otherwise.&lt;/p&gt;

&lt;p&gt;It’s a clever design. The pause means you can keep using the rest of the site. The one-time link means an attacker who scraped the email later can’t replay it. The extra password gate means a hijacked browser session alone isn’t enough to disable security plugins.&lt;/p&gt;

&lt;p&gt;But there’s one assumption baked in that bites in practice.&lt;/p&gt;

&lt;h2&gt;
  
  
  The email is the problem
&lt;/h2&gt;

&lt;p&gt;The recovery link has to leave the server somehow. Core ships it by email. That’s where it falls apart:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Only the “main” admin gets the email.&lt;/strong&gt; WordPress sends the recovery link to the single &lt;code&gt;admin_email&lt;/code&gt; option, not to every administrator on the site. If five people share admin rights, four of them are watching the site go down without a link to fix it.&lt;br&gt;
&lt;strong&gt;That admin email is often a ghost address.&lt;/strong&gt; Set during install years ago. Belongs to a developer who left. Points at a Gmail inbox nobody checks. Points at &lt;code&gt;info@&lt;/code&gt; with a 90% spam ratio. The link expires before anyone notices it arrived.&lt;br&gt;
If your SMTP plugin was the one that crashed, no email goes out at all.&lt;br&gt;
If your DNS or mail server is having a bad day, no email goes out at all.&lt;br&gt;
If the email lands in spam, you might miss it during the exact 60 seconds you’re trying to recover.&lt;br&gt;
If you’re a freelancer working on a client’s site and the admin email is somebody else’s address, congratulations, you can’t help your client until they forward you a one-time link they don’t understand.&lt;/p&gt;

&lt;p&gt;None of these are core’s fault. They’re real failure modes that turn a 30-second fix into a 30-minute scramble, or a much longer outage when the link lands in an inbox nobody opens.&lt;/p&gt;

&lt;p&gt;The default white screen. The email link is supposedly on its way.&lt;/p&gt;

&lt;h2&gt;
  
  
  What WP Multitool does differently
&lt;/h2&gt;

&lt;p&gt;If you’re already logged in as an admin when the fatal happens, WP Multitool’s drop-in (&lt;code&gt;wp-content/fatal-error-handler.php&lt;/code&gt;) catches the crash before WordPress emails anything. It:&lt;/p&gt;

&lt;p&gt;Generates the same Recovery Mode URL core would have emailed. Same &lt;code&gt;rm_token&lt;/code&gt; and &lt;code&gt;rm_key&lt;/code&gt;, same machinery, same security model.&lt;br&gt;
Redirects your browser to it directly. No inbox detour.&lt;br&gt;
Then steps out of the way and lets core handle the rest – validate key, set cookie, ask for password, drop you into Recovery Mode.&lt;/p&gt;

&lt;p&gt;That’s the entire change. We don’t replace Recovery Mode. We don’t reinvent the security gate. We skip the &lt;em&gt;email&lt;/em&gt; leg of the chain when it’s pointless, because you’re literally already at the keyboard.&lt;/p&gt;

&lt;p&gt;Recovery Mode dashboard, with the “Exit Recovery Mode” button top right.&lt;/p&gt;

&lt;p&gt;The broken plugin is paused. The rest of the site keeps working.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you’ll actually click
&lt;/h2&gt;

&lt;p&gt;The full flow looks like this from your point of view:&lt;/p&gt;

&lt;p&gt;You’re in wp-admin doing something. A fatal error happens.&lt;br&gt;
Your browser briefly visits &lt;code&gt;wp-login.php?action=enter_recovery_mode&amp;amp;amp;rm_token=...&amp;amp;amp;rm_key=...&lt;/code&gt; and then &lt;code&gt;?action=entered_recovery_mode&lt;/code&gt;. You’ll see the URL bar flash through these.&lt;br&gt;
You land on a familiar-looking login form with one extra notice at the top – &lt;strong&gt;“Recovery Mode Initialized. Please log in to continue.”&lt;/strong&gt;&lt;br&gt;
You type your password. Yes, the same one you just used. See “the sudo gate” below.&lt;br&gt;
You’re in wp-admin with a yellow Recovery Mode banner. The broken plugin is listed as paused. Fix the code or click Disable. Click &lt;strong&gt;Exit Recovery Mode&lt;/strong&gt; when you’re done.&lt;/p&gt;

&lt;p&gt;No inbox. No “where’s the email.” No forwarding it to yourself from another device.&lt;/p&gt;

&lt;h2&gt;
  
  
  The sudo gate (and why we don’t kill it)
&lt;/h2&gt;

&lt;p&gt;You’re going to enter your password one more time during this flow. We deliberately left that step in place.&lt;/p&gt;

&lt;p&gt;Recovery Mode lets you disable any plugin or theme, see file paths and stack traces, and inspect a half-broken site. It’s a privileged context, like sudo. WordPress wants one fresh credential confirmation before granting it. Three good reasons for that:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cookie-only sessions aren’t enough.&lt;/strong&gt; If your browser session was hijacked and the attacker triggered a fatal to get into Recovery Mode (where they could disable Wordfence), a password gate stops them.&lt;br&gt;
&lt;strong&gt;The recovery link can leak.&lt;/strong&gt; Even if you skip the email like we do, the URL might still end up in browser history, a reverse proxy log, a screen share recording. The password requirement makes that URL useless without the credential.&lt;br&gt;
&lt;strong&gt;The recovery key is one-time.&lt;/strong&gt; Combined with the fresh password entry, an attacker who somehow sniffed the URL mid-flight can’t replay it.&lt;/p&gt;

&lt;p&gt;So even with our shortcut, you’ll see the login form once. If you weren’t logged in when the crash happened, you’ll see it twice – once to be admin again, once to be sudo-admin. That’s a WordPress design floor we don’t try to dig under.&lt;/p&gt;

&lt;p&gt;Clean state once you’re inside Recovery Mode.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it doesn’t do
&lt;/h2&gt;

&lt;p&gt;A few honest caveats:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn’t help logged-out visitors.&lt;/strong&gt; If a non-admin visitor triggers the fatal first, our drop-in falls through to WordPress’s default behavior. Recovery Mode is for the person fixing the site, not the person browsing it.&lt;br&gt;
&lt;strong&gt;It doesn’t catch errors in WordPress core files.&lt;/strong&gt; Only plugin and theme fatals trigger recovery, by core’s design, not ours. If you’re editing &lt;code&gt;wp-includes/&lt;/code&gt;, you’re on your own (and you shouldn’t be editing those).&lt;br&gt;
&lt;strong&gt;It doesn’t replace backups.&lt;/strong&gt; Recovery Mode pauses the broken extension. It doesn’t undo whatever data damage the bad code did before it died. If you’re touching anything in production, have a recent backup.&lt;br&gt;
&lt;strong&gt;It doesn’t make you immune to bad code.&lt;/strong&gt; It just makes the consequences cheaper to fix.&lt;/p&gt;

&lt;p&gt;And there's a failure mode past all of this: the site is &lt;em&gt;already&lt;/em&gt; fully down, you have no admin access, and the recovery email landed in an inbox nobody checks. At that point you're out of prevention and into triage — &lt;a href="https://fix-wp.com/" rel="noopener noreferrer"&gt;emergency WordPress repair&lt;/a&gt; gets a crashed site diagnosed and back online in about an hour.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to see it work yourself
&lt;/h2&gt;

&lt;p&gt;Install WP Multitool, make sure it’s active, then drop a one-line plugin into &lt;code&gt;wp-content/plugins/&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;amp;lt;?php&lt;br&gt;
/** Plugin Name: Crash Test */&lt;br&gt;
add_action( 'admin_init', function () {&lt;br&gt;
    this_function_does_not_exist();&lt;br&gt;
} );&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Activate it from the Plugins page. The next admin pageload will fatal, and you’ll be in Recovery Mode about half a second later.&lt;br&gt;
Disable Crash Test from inside Recovery Mode, then click &lt;strong&gt;Exit Recovery Mode&lt;/strong&gt;. Site is back.&lt;/p&gt;

&lt;p&gt;No email was sent. No DNS was consulted. (Don’t try this on a production site. Obviously.)&lt;/p&gt;

&lt;h2&gt;
  
  
  The cleanup companion
&lt;/h2&gt;

&lt;p&gt;Once you’ve disabled the broken plugin and fixed the code, you’ll want to re-activate it. The standard WordPress plugins page makes this two clicks (Deactivate, Activate). Fine for one plugin, annoying when you’re iterating on a fix. WP Multitool’s &lt;strong&gt;Plugin Reactivator&lt;/strong&gt; module adds a one-click &lt;em&gt;Reactivate&lt;/em&gt; link to each row on the plugins page. That’s exactly the affordance you want during a “fix, test, fix again” cycle.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Your WordPress media library is hiding gigabytes you can&amp;#8217;t see</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Tue, 16 Jun 2026 15:09:24 +0000</pubDate>
      <link>https://dev.to/wpmultitool/your-wordpress-media-library-is-hiding-gigabytes-you-can8217t-see-48f7</link>
      <guid>https://dev.to/wpmultitool/your-wordpress-media-library-is-hiding-gigabytes-you-can8217t-see-48f7</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://wpmultitool.com/2026/06/02/reclaim-wordpress-image-storage/" rel="noopener noreferrer"&gt;https://wpmultitool.com/2026/06/02/reclaim-wordpress-image-storage/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every time you upload one image, WordPress quietly makes five or six more. Thumbnail, medium, medium_large, large – then your theme adds a couple, WooCommerce adds three, and whatever gallery plugin you installed last year adds two you’ve never looked at.&lt;/p&gt;

&lt;p&gt;On a small blog that’s fine. On a real site with a few thousand images, it adds up to gigabytes of derivative files. And here’s the part that bugs me – a lot of those sizes are duplicates of each other (640×640 vs 600×600, who can tell?), or they were registered by a plugin you deleted months ago and nothing references them anymore.&lt;/p&gt;

&lt;p&gt;You’re paying for that storage. You’re backing it up. You’re syncing it. For files nothing ever loads.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we changed
&lt;/h2&gt;

&lt;p&gt;WP Multitool’s Image Manager already had &lt;a href="https://wpmultitool.com/blog/wp-multitool-1-1-20-action-scheduler-image-analysis/" rel="noopener noreferrer"&gt;an analyzer&lt;/a&gt; – “Find Sizes to Disable” – that scanned your registered sizes and flagged the duplicates and the unused ones. Useful, but it only told you. You still had to go clean up by hand.&lt;/p&gt;

&lt;p&gt;Now it actually does the work. Run the analyzer and you get a “Reclaim space” button on every flagged size. There’s a per-row version, and a bulk one for unused sizes. Click it and it walks your whole media library, deletes the generated files for that size, and tells you how many megabytes it freed.&lt;/p&gt;

&lt;p&gt;That’s the whole point – turn “here’s what’s wasting space” into “ok, it’s gone.”&lt;/p&gt;

&lt;p&gt;One flagged size, one button. “Reclaim space” deletes the generated files for that size across the whole library – and Regenerate is right there if you change your mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  The safety stuff, because this is your media library
&lt;/h2&gt;

&lt;p&gt;I’m not going to ship a feature that can wreck someone’s images, so let me be clear about what it touches.&lt;/p&gt;

&lt;p&gt;It only deletes the intermediate files – the &lt;code&gt;image-640x480.webp&lt;/code&gt; derivatives. Your original upload is never touched. The code literally can’t reach the original; it only ever resolves the size files in the attachment metadata.&lt;/p&gt;

&lt;p&gt;It’s reversible. Every size keeps its “Regenerate” button. Reclaimed something you actually needed? One click and WordPress rebuilds it from the original. No backup restore, no drama.&lt;/p&gt;

&lt;p&gt;And when you reclaim a size, it also disables future generation of that size. Otherwise you’d delete the files today and the next upload would recreate them tomorrow. Reclaiming and disabling go together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Knowing what’s actually used
&lt;/h2&gt;

&lt;p&gt;The hard part of all this isn’t deleting files. It’s being sure a size is really unused before you nuke it.&lt;/p&gt;

&lt;p&gt;So the detection got smarter. It now scans your post content (classic markup and Gutenberg’s &lt;code&gt;sizeSlug&lt;/code&gt;), Elementor’s &lt;code&gt;_elementor_data&lt;/code&gt;, media image widgets, and your active theme’s PHP files. There’s a new “Content refs” column that tells you where each size shows up – content, Elementor, widget, theme. If a size is referenced, you’ll see it, and you won’t disable it by accident.&lt;/p&gt;

&lt;p&gt;If nothing references it, the column says “none detected” and the tooltip says to verify before disabling. Not “safe to delete.” Verify. There’s a difference, and I’ll get to why in a second.&lt;/p&gt;

&lt;p&gt;Every registered size, annotated: duplicates, theme sizes, what’s unused, and the new Content refs column showing where each size actually shows up before you touch it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it won’t do
&lt;/h2&gt;

&lt;p&gt;I’d rather tell you the limits than have you find them the hard way.&lt;/p&gt;

&lt;p&gt;Detection has blind spots. If your images are served from an edge cache like Cloudflare, those requests never hit your origin, so I can’t see them in logs. If a size is used in some dynamic context – a REST endpoint, an OG image generated on the fly, an email template – a content scan won’t catch it. Deeply nested page-builder JSON can hide references too.&lt;/p&gt;

&lt;p&gt;That’s why the UI never says “safe to delete.” It says “no reference found, verify before disabling.” You know your site. The tool narrows it down; you make the call. And since everything’s reversible, the cost of being wrong is one click.&lt;/p&gt;

&lt;p&gt;It also doesn’t recompress your images or convert anything to WebP/AVIF. That’s a different job. This is about sizes you don’t need at all, not squeezing the ones you keep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for the servers people actually run
&lt;/h2&gt;

&lt;p&gt;A lot of WordPress runs on cheap shared hosting with a tight &lt;code&gt;max_execution_time&lt;/code&gt;. So the scan is on-demand only – it never runs on page load, only when you click the button. It reads the database row by row instead of pulling everything into memory, stops scanning a size the moment it finds a reference, and has a hard cap on how many rows it’ll touch. Hit a site big enough to reach that cap and it tells you the results might be incomplete instead of timing out and giving you nothing.&lt;/p&gt;

&lt;p&gt;I tested it on a site with 1000 images and 1200 posts. The scan came back in under a second. The interesting bit – the reference scanning was basically free; the time goes into checking actual disk usage across the library. Good to know for what we optimize next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;All of this shipped in &lt;a href="https://wpmultitool.com/changelog/" rel="noopener noreferrer"&gt;WP Multitool 1.3.0&lt;/a&gt;. If you’ve got a media library that’s grown over a few years, run the analyzer once. I think most people will be surprised how much is sitting there doing nothing. Don’t have it yet? &lt;a href="https://wpmultitool.com/" rel="noopener noreferrer"&gt;Grab WP Multitool&lt;/a&gt; and point it at your worst offender of a site.&lt;/p&gt;

&lt;p&gt;Next up I want to push the usage detection further – reading server access logs to see which sizes actually get requested, not just which ones are referenced in content. That closes the edge-cache gap. More on that when it’s working.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Site Doctor: the WordPress problems you can&amp;#8217;t see, found and fixed</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Tue, 16 Jun 2026 15:09:22 +0000</pubDate>
      <link>https://dev.to/wpmultitool/site-doctor-the-wordpress-problems-you-can8217t-see-found-and-fixed-1l9e</link>
      <guid>https://dev.to/wpmultitool/site-doctor-the-wordpress-problems-you-can8217t-see-found-and-fixed-1l9e</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://wpmultitool.com/2026/06/16/wordpress-site-doctor/" rel="noopener noreferrer"&gt;https://wpmultitool.com/2026/06/16/wordpress-site-doctor/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A health monitor for your WordPress site. The flatline spots are where the money leaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problems that don’t show up anywhere
&lt;/h2&gt;

&lt;p&gt;The site loads. Nothing is on fire. And yet OPcache is thrashing because its key table is full, so PHP recompiles on half your requests. There’s an &lt;code&gt;object-cache.php&lt;/code&gt; drop-in still pointing at a Redis server that died three months ago, quietly erroring on every page. The homepage misses the page cache on every single hit and nobody noticed, because it still &lt;em&gt;renders&lt;/em&gt;, just three seconds slower than it should. Most of what slows a WordPress site down is invisible from the dashboard.&lt;/p&gt;

&lt;p&gt;I fix real client sites for a living, and the same handful of misconfigurations come up again and again. They’re never in the obvious place. You find them by SSHing in, reading &lt;code&gt;opcache_get_status()&lt;/code&gt; by hand, curling your own homepage to read the cache header, squinting at &lt;code&gt;wp_options&lt;/code&gt;. Every time. So I turned that checklist into a module. It’s called &lt;strong&gt;Site Doctor&lt;/strong&gt;, and it’s the headline of 1.4.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the WordPress Site Doctor health check does
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Site Doctor is an on-demand WordPress health check that scans five production misconfigurations WordPress hides from you (OPcache state, a dead object-cache drop-in, LiteSpeed misconfiguration, page-cache misses, and WooCommerce gateways stuck in test mode) and hands you the exact fix for each one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You click &lt;em&gt;Run scan&lt;/em&gt; (or run &lt;code&gt;wp multitool doctor&lt;/code&gt; from the command line) and it checks the things that actually cost you, then tells you how to fix each one. It’s read-only and it &lt;strong&gt;never runs on a normal page load&lt;/strong&gt;. The scan fires once, when you ask it to, and caches the result. It’s a diagnostic tool you reach for, not another thing bolted to every request.&lt;/p&gt;

&lt;p&gt;One scan, five checks, a fix on every finding. This is the real module, not a mock-up.&lt;br&gt;
Here’s what it looks at:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OPcache health.&lt;/strong&gt; Not just on or off. It catches the states that actually hurt: out-of-memory restarts, a full key table forcing recompiles, a populated cache with a low hit rate. When something’s wrong it hands you a sized &lt;code&gt;php.ini&lt;/code&gt; snippet calculated from your live numbers, not generic advice.&lt;br&gt;
&lt;strong&gt;The object-cache drop-in.&lt;/strong&gt; A present-but-dead drop-in (the file is there, the backend isn’t answering) is flagged &lt;em&gt;critical&lt;/em&gt;, because that’s the silent killer: it can error on every request while the site still limps along. It identifies the vendor and tells you the safe move.&lt;br&gt;
&lt;strong&gt;Page caching, via one real loopback request.&lt;/strong&gt; It fires a single request at your own homepage and reads the cache header. HIT or MISS, LiteSpeed or Cloudflare or Varnish or Kinsta. A cache layer that’s present but missing on every hit is worth knowing about.&lt;br&gt;
&lt;strong&gt;LiteSpeed&lt;/strong&gt; misconfiguration detection for sites running LSCWP, the kind of thing that silently stops LiteSpeed from caching even though the plugin is active.&lt;br&gt;
&lt;strong&gt;WooCommerce payment gateways stuck in test mode.&lt;/strong&gt; A live shop with a gateway still in sandbox can’t actually take money. It catches the enabled-but-test-mode gateways (including the Przelewy24 wizard bug that saves a localized label instead of “production”) so you find out before a customer does.&lt;/p&gt;

&lt;p&gt;It deliberately does &lt;em&gt;not&lt;/em&gt; duplicate what other modules already do well: cleaning expired transients and chasing down overdue cron live in the Database Optimizer and the Site Health view. Site Doctor sticks to the configuration problems nothing else surfaces.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detect &lt;em&gt;and&lt;/em&gt; fix, not just a wall of red
&lt;/h2&gt;

&lt;p&gt;I have a rule for Site Doctor: a check isn’t allowed to ship unless it comes with a fix. Finding a problem and shrugging is what most “health check” tools do, and it’s useless when you’re tired and just want the site fast again.&lt;/p&gt;

&lt;p&gt;So every finding carries remediation. Not “consider tuning your cache”, but the actual change to make, with the real values. OPcache flags a problem and hands you a sized &lt;code&gt;php.ini&lt;/code&gt; snippet calculated from your live numbers. A gateway in test mode tells you the exact setting to flip. I don’t want a plugin auto-changing this stuff behind your back from PHP. Flipping a payment gateway live is your call, not the scanner’s. So the fix is concrete guidance you act on, not a button that guesses.&lt;/p&gt;

&lt;p&gt;One more thing I care about: it doesn’t cry wolf on your laptop. Site Doctor has a staging-guard that quietly downgrades severities on dev hosts (&lt;code&gt;.loc&lt;/code&gt;, &lt;code&gt;.local&lt;/code&gt;, &lt;code&gt;staging.&lt;/code&gt; subdomains, and so on). A dead object cache on your local clone is expected. On production it’s critical. Same check, different stakes, and the tool knows the difference.&lt;/p&gt;

&lt;p&gt;Site Doctor ships &lt;strong&gt;enabled&lt;/strong&gt; out of the box. It’s admin-only and adds nothing to a page load, so there’s no reason to hide it.&lt;/p&gt;

&lt;h2&gt;
  
  
  And when wp-admin won’t even load
&lt;/h2&gt;

&lt;p&gt;Site Doctor assumes you can reach the dashboard. Sometimes you can’t, and that’s the other half of 1.4: a small WP-CLI rescue kit for when wp-admin is the thing that’s broken. Usually it ran out of memory, because the dashboard is the heaviest page on the site.&lt;/p&gt;

&lt;p&gt;The number-one cause of that is a bloated &lt;strong&gt;autoload&lt;/strong&gt; set, the options WordPress loads into memory on every request. Plugins you deactivated months ago leave megabytes of it behind. Three commands, in the order you’d use them:&lt;/p&gt;

&lt;p&gt;Analyze, optimize, restore. Every step reports exactly what it did, and the backup means restore is always one command away.&lt;br&gt;
&lt;code&gt;wp multitool autoload analyze&lt;/code&gt; classifies every autoloaded option and flags the safe-to-trim ones, specifically the leftovers from plugins that aren’t active anymore. &lt;code&gt;optimize&lt;/code&gt; disables autoload for those, after writing a backup. &lt;code&gt;restore&lt;/code&gt; puts every flag back exactly as it was and reports the exact count, so if it didn’t help you’re one command from where you started. There’s also &lt;code&gt;wp multitool modules&lt;/code&gt; to enable and disable modules from the command line when you can’t reach the toggles.&lt;/p&gt;

&lt;p&gt;I’ll be honest about the autoload win, because the internet oversells it. It mostly moves TTFB on sites with a big autoload set and no persistent object cache. On Redis or Memcached the blob is already cached and the gain shrinks to memory. On a query-bound site the real problem is usually the queries, which is the last new tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Catch an N+1 query storm in one page load
&lt;/h2&gt;

&lt;p&gt;The classic WordPress performance killer is the &lt;strong&gt;N+1 query&lt;/strong&gt;: a plugin runs the same query once per item in a loop, so a page with 50 products fires 50 near-identical queries instead of one. Finding these usually means leaving query logging on and digging, which you don’t want running on a live site.&lt;/p&gt;

&lt;p&gt;1.4 adds a one-shot probe. &lt;code&gt;wp multitool slow-queries probe&lt;/code&gt; fires a single request at your front end with query logging on for that one request only, gated behind a one-time token, then switches logging straight back off.&lt;/p&gt;

&lt;p&gt;One real page load, 81 queries captured. The top row ran 54 times. That’s an N+1, flagged automatically.&lt;br&gt;
That &lt;code&gt;54&amp;amp;times;&lt;/code&gt; in the first column is the whole point. One query running 54 times on a single page load is an N+1 waving its arms at you, and where an index would help, the probe hands you the exact &lt;code&gt;CREATE INDEX&lt;/code&gt; statement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Less overhead out of the box
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The profiling modules now ship off.&lt;/strong&gt; On a fresh install, the Slow Query Analyzer and Find Slow Callbacks start disabled. They’re diagnostic tools you reach for when hunting a problem, so a fresh install adds no per-request profiling cost until you turn one on. Existing sites keep whatever you already had.&lt;br&gt;
&lt;strong&gt;A low-memory warning&lt;/strong&gt; now fires in the health checks and CLI when your configured memory limit is low, with the exact constant to raise in &lt;code&gt;wp-config.php&lt;/code&gt;. Better to know before the dashboard dies, not after.&lt;/p&gt;

&lt;h2&gt;
  
  
  The safety net that can’t be switched off by accident
&lt;/h2&gt;

&lt;p&gt;One hardening note. WP Multitool’s &lt;a href="https://wpmultitool.com/blog/wp-multitool-fatal-error-recovery/" rel="noopener noreferrer"&gt;Fatal Error Recovery&lt;/a&gt;, the thing that gets you back into a white-screened site, is now a deliberate always-on safety net. It’s no longer owned by any toggleable module, so disabling modules (from the dashboard or the new CLI commands) can never strip a site of its crash recovery. The one feature you’d most want during an outage is the one you can’t turn off by mistake.&lt;/p&gt;

&lt;h2&gt;
  
  
  The point
&lt;/h2&gt;

&lt;p&gt;Site Doctor is the part of this release I’m most happy with, because it’s the checklist I actually run on real sites, turned into one button. Most WordPress tooling tells you a site is “healthy” when it loads. The interesting problems are the ones that don’t announce themselves: the dead cache, the thrashing opcode cache, the query fired fifty times. 1.4 is about finding those, and fixing them.&lt;/p&gt;

&lt;p&gt;WP Multitool 1.4 is available now, and existing license holders get it through the in-plugin updater, no re-download needed. New to it? You can &lt;a href="https://wpmultitool.com/" rel="noopener noreferrer"&gt;get WP Multitool&lt;/a&gt;, or skim the &lt;a href="https://wpmultitool.com/changelog/" rel="noopener noreferrer"&gt;full 1.4 changelog&lt;/a&gt; for everything that shipped.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Do You Really Need 6 WordPress Plugins for Performance?</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:40:50 +0000</pubDate>
      <link>https://dev.to/wpmultitool/do-you-really-need-6-wordpress-plugins-for-performance-4l55</link>
      <guid>https://dev.to/wpmultitool/do-you-really-need-6-wordpress-plugins-for-performance-4l55</guid>
      <description>&lt;p&gt;I counted the plugins on a client's site last month. Six of them existed purely to help manage WordPress itself. Not to add features. Not to serve visitors. Just... maintenance tools.&lt;/p&gt;

&lt;p&gt;Query Monitor for debugging. WP-Optimize for database cleanup. Health Check for troubleshooting. WP Config File Editor for constants. Asset CleanUp for frontend bloat. And WP-CLI commands scattered across five different terminal windows.&lt;/p&gt;

&lt;p&gt;Six plugins. Six update cycles. Six potential conflicts. Six sets of admin pages cluttering the sidebar. All doing things that should probably be one tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Plugin Stack Problem
&lt;/h2&gt;

&lt;p&gt;Every plugin you install adds weight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Memory overhead&lt;/strong&gt; - each plugin loads its PHP files on every request, even if you only use it once a week&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autoload bloat&lt;/strong&gt; - many plugins store options with &lt;code&gt;autoload = yes&lt;/code&gt;, meaning they load on every single page request even when inactive&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update fatigue&lt;/strong&gt; - six plugins means six update notifications, six changelogs to read, six chances for a breaking change&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conflict risk&lt;/strong&gt; - more plugins means more hooks, more filters, more chances of stepping on each other&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't theoretical. On one client's site, the debugging and optimization plugins together were using several megabytes of extra memory per request. The tools meant to find performance problems were adding to the problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Six-Plugin Stack (And What Each Does)
&lt;/h2&gt;

&lt;p&gt;Here's the typical WordPress maintenance stack and what each plugin handles:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Query Monitor
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Shows database queries, PHP errors, hooks, HTTP calls, template hierarchy on the current page.&lt;br&gt;
&lt;strong&gt;Why you install it:&lt;/strong&gt; Something is slow and you need to figure out what.&lt;br&gt;
&lt;strong&gt;The gap:&lt;/strong&gt; No persistent logging. No production monitoring. No fix suggestions. You close the tab, the data is gone.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. WP-Optimize
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Database cleanup (revisions, transients, orphaned data), image compression, basic caching.&lt;br&gt;
&lt;strong&gt;Why you install it:&lt;/strong&gt; The database has 50,000 post revisions and someone told you to clean them.&lt;br&gt;
&lt;strong&gt;The gap:&lt;/strong&gt; Doesn't tell you which queries are slow. Doesn't touch autoload settings. Cleanup without diagnosis.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Health Check &amp;amp; Troubleshooting
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; System info, troubleshooting mode that disables plugins/themes for your session only while other visitors see the normal site.&lt;br&gt;
&lt;strong&gt;Why you install it:&lt;/strong&gt; You need to figure out which plugin is causing a conflict without taking the site down.&lt;br&gt;
&lt;strong&gt;The gap:&lt;/strong&gt; The troubleshooting mode is genuinely clever. But outside of conflict diagnosis, it sits there doing nothing. You use it twice a year.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. WP Config File Editor
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; GUI for editing wp-config.php constants (WP_DEBUG, memory limits, etc.)&lt;br&gt;
&lt;strong&gt;Why you install it:&lt;/strong&gt; Because editing wp-config.php via SSH/FTP is annoying and error-prone.&lt;br&gt;
&lt;strong&gt;The gap:&lt;/strong&gt; A narrow tool for a narrow job. Works, but it's one more plugin in the pile.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Asset CleanUp (Perfmatters, etc.)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Removes unnecessary scripts and styles from pages, defers JavaScript, disables features like emojis and dashicons.&lt;br&gt;
&lt;strong&gt;Why you install it:&lt;/strong&gt; PageSpeed Insights told you to "eliminate render-blocking resources."&lt;br&gt;
&lt;strong&gt;The gap:&lt;/strong&gt; The free version handles per-page script unloading well. But site-wide rules, more granular control, and advanced features are premium ($49+).&lt;/p&gt;

&lt;h3&gt;
  
  
  6. WP-CLI
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Command-line interface for WordPress management.&lt;br&gt;
&lt;strong&gt;Why you use it:&lt;/strong&gt; Database queries, cache management, cron jobs, bulk operations.&lt;br&gt;
&lt;strong&gt;The gap:&lt;/strong&gt; Not a plugin, but part of the stack. Requires SSH access and command-line knowledge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Total: 5 plugins + 1 CLI tool.&lt;/strong&gt; Each one loading its own PHP files, hooks, and options on every request.&lt;/p&gt;

&lt;h2&gt;
  
  
  The One-Plugin Alternative
&lt;/h2&gt;

&lt;p&gt;Here's how WP Multitool's 14 modules map to each of these tools:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your Current Plugin&lt;/th&gt;
&lt;th&gt;WP Multitool Module&lt;/th&gt;
&lt;th&gt;What Changes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Query Monitor&lt;/td&gt;
&lt;td&gt;Slow Query Analyzer + Find Slow Callbacks&lt;/td&gt;
&lt;td&gt;Persistent logging, EXPLAIN analysis, production-safe monitoring. Still use QM for quick debugging - they complement each other.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WP-Optimize&lt;/td&gt;
&lt;td&gt;Database Optimizer + Autoloader Optimizer&lt;/td&gt;
&lt;td&gt;Same cleanup, plus autoload optimization that WP-Optimize doesn't touch. No image compression or caching (use a dedicated caching plugin).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Health Check&lt;/td&gt;
&lt;td&gt;System Info + Plugin Reactivator&lt;/td&gt;
&lt;td&gt;Server diagnostics + one-click plugin reactivation for troubleshooting.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WP Config File Editor&lt;/td&gt;
&lt;td&gt;Config Manager&lt;/td&gt;
&lt;td&gt;Edit wp-config.php constants from admin. Backup before changes. Actively maintained.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Asset CleanUp&lt;/td&gt;
&lt;td&gt;Frontend Optimizer&lt;/td&gt;
&lt;td&gt;Defer scripts, remove jQuery Migrate, disable dashicons/emojis, clean head. The 80% of Asset CleanUp you actually use.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WP-CLI (for performance)&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;wp multitool&lt;/code&gt; CLI commands&lt;/td&gt;
&lt;td&gt;7 subcommands: status, health, db-health, autoload, slow-queries, frontend, clean.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Plus 6 modules that none of those plugins offer:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://wpmultitool.com/blog/plugin-performance-score/" rel="noopener noreferrer"&gt;Plugin Performance Score&lt;/a&gt;&lt;/strong&gt; - benchmark scores for every installed plugin, right on the Plugins page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Manager&lt;/strong&gt; - manage and remove unused image sizes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shortcode Inspector&lt;/strong&gt; - find and test every registered shortcode&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick Updater&lt;/strong&gt; - drag-drop plugin updates from ZIP files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Package Downloader&lt;/strong&gt; - download any installed plugin/theme as ZIP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard Widget Manager&lt;/strong&gt; - control what shows on the admin dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Math
&lt;/h2&gt;

&lt;p&gt;Let's do the honest calculation:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;6-Plugin Stack&lt;/th&gt;
&lt;th&gt;WP Multitool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plugins to maintain&lt;/td&gt;
&lt;td&gt;5-6&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Admin menu items&lt;/td&gt;
&lt;td&gt;5-8&lt;/td&gt;
&lt;td&gt;1 (with subpages)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update notifications&lt;/td&gt;
&lt;td&gt;5-6/month&lt;/td&gt;
&lt;td&gt;1/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Combined cost&lt;/td&gt;
&lt;td&gt;$0-$250+ (if using premium versions)&lt;/td&gt;
&lt;td&gt;$199/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Conflict risk&lt;/td&gt;
&lt;td&gt;Moderate (overlapping hooks)&lt;/td&gt;
&lt;td&gt;None (one codebase)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modules you can disable&lt;/td&gt;
&lt;td&gt;Sometimes&lt;/td&gt;
&lt;td&gt;Always (enable only what you need)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The cost comparison depends on your stack. If you're using all free versions, WP Multitool costs more. If you're paying for Asset CleanUp Pro and WP-Optimize Premium (starting at $49/year each), the math is closer to even - and you get significantly more functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Lose
&lt;/h2&gt;

&lt;p&gt;I'm not going to pretend WP Multitool replaces everything perfectly. Here's what you'd miss:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Query Monitor's breadth&lt;/strong&gt; - QM shows hooks, template hierarchy, conditionals, HTTP calls. WP Multitool focuses on query and callback performance. I still recommend keeping QM installed for deep debugging sessions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WP-Optimize's image compression&lt;/strong&gt; - WP Multitool doesn't compress images. Use ShortPixel, Imagify, or similar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WP-Optimize's page caching&lt;/strong&gt; - WP Multitool doesn't cache. Use WP Super Cache, W3 Total Cache, or your host's caching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Health Check's troubleshooting mode&lt;/strong&gt; - The "enable safe mode for your session" feature is unique to Health Check. WP Multitool's Reactivator is simpler.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So realistically, you might go from 6 tools to 3: WP Multitool + a caching plugin + QM for the occasional deep dive. That's still cutting your maintenance stack in half.&lt;/p&gt;

&lt;h2&gt;
  
  
  When This Makes Sense
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;This consolidation makes sense if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You manage multiple WordPress sites and want fewer plugins to track&lt;/li&gt;
&lt;li&gt;You're hitting memory limits and need to reduce plugin overhead&lt;/li&gt;
&lt;li&gt;You want &lt;a href="https://wpmultitool.com/blog/wp-options-autoload-trap/" rel="noopener noreferrer"&gt;autoload optimization&lt;/a&gt; and slow query detection that none of the free plugins offer&lt;/li&gt;
&lt;li&gt;You're tired of 6 different admin interfaces for related tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Stick with the individual plugins if:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You only need one specific feature (just cleanup? WP-Optimize is fine)&lt;/li&gt;
&lt;li&gt;Budget is zero (most of the 6-plugin stack is free)&lt;/li&gt;
&lt;li&gt;You have a workflow that works and change isn't worth the disruption&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;The full module list with documentation is at &lt;a href="https://wpmultitool.com" rel="noopener noreferrer"&gt;wpmultitool.com&lt;/a&gt;. Every module can be enabled or disabled independently - you don't have to use all 14.&lt;/p&gt;

&lt;p&gt;Use code &lt;strong&gt;startups2026&lt;/strong&gt; for 10% off if any of this resonated.&lt;/p&gt;

&lt;p&gt;And if you want to read more about &lt;a href="https://wpmultitool.com/blog/why-caching-plugins-dont-fix-slow-wordpress/" rel="noopener noreferrer"&gt;why caching plugins don't fix slow sites&lt;/a&gt; or &lt;a href="https://wpmultitool.com/blog/how-to-read-mysql-explain-wordpress/" rel="noopener noreferrer"&gt;how to read a MySQL EXPLAIN plan&lt;/a&gt; - those are the rabbit holes that led me to build this thing in the first place.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://wpmultitool.com/blog/do-you-need-6-wordpress-plugins/" rel="noopener noreferrer"&gt;https://wpmultitool.com/blog/do-you-need-6-wordpress-plugins/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>performance</category>
      <category>plugins</category>
    </item>
    <item>
      <title>WP-Optimize Cleans Your Database. That's About It.</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:40:48 +0000</pubDate>
      <link>https://dev.to/wpmultitool/wp-optimize-cleans-your-database-thats-about-it-4l00</link>
      <guid>https://dev.to/wpmultitool/wp-optimize-cleans-your-database-thats-about-it-4l00</guid>
      <description>&lt;p&gt;Every WordPress developer has that moment. The site is slow, someone says "just install WP-Optimize," and you clean up 5,000 post revisions. The site loads 200ms faster. You feel good about it.&lt;/p&gt;

&lt;p&gt;Then a week later, it's slow again. Because the problem was never the revisions.&lt;/p&gt;

&lt;p&gt;If you've been looking for a wp-optimize alternative that goes deeper than database cleanup, this comparison breaks down where each tool fits - and where it doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  What WP-Optimize Does
&lt;/h2&gt;

&lt;p&gt;WP-Optimize by Team Updraft (the same team behind UpdraftPlus) has been around for years. Over 1 million active installs. It does three things:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Database Cleanup
&lt;/h3&gt;

&lt;p&gt;This is the core feature. It removes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Post revisions&lt;/li&gt;
&lt;li&gt;Auto-drafts&lt;/li&gt;
&lt;li&gt;Trashed posts&lt;/li&gt;
&lt;li&gt;Spam and trashed comments&lt;/li&gt;
&lt;li&gt;Expired transients&lt;/li&gt;
&lt;li&gt;Orphaned postmeta and commentmeta&lt;/li&gt;
&lt;li&gt;Pingbacks and trackbacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can schedule these cleanups to run automatically. The premium version adds multisite support and more granular control.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Image Compression
&lt;/h3&gt;

&lt;p&gt;Even the free version includes image compression via reSmush.it - lossy and lossless compression, WebP conversion, and bulk optimization. The premium version adds lazy loading and unused image size removal.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Page Caching
&lt;/h3&gt;

&lt;p&gt;WP-Optimize added caching in recent versions. Page caching with preloading, browser caching headers, and GZIP compression.&lt;/p&gt;

&lt;p&gt;That's the full picture. Database cleanup, image compression (even in the free version), and caching. Three features, one plugin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where WP-Optimize Stops
&lt;/h2&gt;

&lt;p&gt;Here's what WP-Optimize doesn't touch:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn't tell you WHY your database is slow.&lt;/strong&gt; It removes old data, but it never looks at which queries are actually causing problems. You might have 50 slow queries from a WooCommerce meta_query, and cleaning up revisions won't help with any of them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn't analyze autoload bloat.&lt;/strong&gt; The &lt;code&gt;wp_options&lt;/code&gt; table is often the biggest performance killer in WordPress, and the problem isn't old data - it's autoloaded options from plugins you deactivated months ago. WP-Optimize doesn't touch autoload settings. If you want to understand why autoload matters, I wrote about &lt;a href="https://wpmultitool.com/blog/wp-options-autoload-trap/" rel="noopener noreferrer"&gt;the wp_options autoload trap&lt;/a&gt; in detail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn't help with debugging.&lt;/strong&gt; No slow query detection, no callback profiling, no system diagnostics. If something is wrong, WP-Optimize can't tell you what.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn't manage your configuration.&lt;/strong&gt; Need to toggle &lt;code&gt;WP_DEBUG&lt;/code&gt; or change &lt;code&gt;WP_MEMORY_LIMIT&lt;/code&gt;? You're editing wp-config.php by hand.&lt;/p&gt;

&lt;h2&gt;
  
  
  What WP Multitool Does Differently
&lt;/h2&gt;

&lt;p&gt;WP Multitool isn't a database cleanup plugin. It's 14 modules covering optimization, debugging, and site management. But let me focus on the overlap first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Database Cleanup: Both Do It
&lt;/h3&gt;

&lt;p&gt;WP Multitool's Database Optimizer module handles the same cleanup tasks - revisions, transients, orphaned data, table optimization. No meaningful difference here. Both get the job done.&lt;/p&gt;

&lt;h3&gt;
  
  
  Autoload Optimization: Only WP Multitool
&lt;/h3&gt;

&lt;p&gt;This is where it gets interesting. WP Multitool's &lt;a href="https://wpmultitool.com/blog/wp-options-autoload-trap/" rel="noopener noreferrer"&gt;Autoloader Optimizer&lt;/a&gt; scans every autoloaded option in &lt;code&gt;wp_options&lt;/code&gt; and classifies them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Active plugin options&lt;/strong&gt; - never touched (safe)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inactive plugin options&lt;/strong&gt; - candidates for optimization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Oversized options&lt;/strong&gt; (&amp;gt;10KB) - flagged for review&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Known bloat patterns&lt;/strong&gt; - tracker/cache leftovers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then it disables autoload on the candidates. Not delete - just stop loading them on every single page request. With a full backup and one-click restore if anything breaks.&lt;/p&gt;

&lt;p&gt;Depending on how many deactivated plugins left options behind, disabling their autoload can save 100KB-2MB of memory per request. WP-Optimize doesn't even look at this.&lt;/p&gt;

&lt;h3&gt;
  
  
  Slow Query Detection: Only WP Multitool
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://wpmultitool.com" rel="noopener noreferrer"&gt;Slow Query Analyzer&lt;/a&gt; monitors your database queries and catches the ones that take too long. Then it runs MySQL EXPLAIN to tell you exactly why - missing index, full table scan, bad join. And it gives you the SQL to fix it.&lt;/p&gt;

&lt;p&gt;WP-Optimize cleans up old data. WP Multitool catches the queries that are slow right now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Everything Else: Only WP Multitool
&lt;/h3&gt;

&lt;p&gt;Here's the full list of what WP Multitool includes beyond what WP-Optimize offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Config Manager&lt;/strong&gt; - &lt;a href="https://wpmultitool.com/blog/stop-editing-wp-config-by-hand/" rel="noopener noreferrer"&gt;edit wp-config.php from the admin&lt;/a&gt;, no SSH needed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find Slow Callbacks&lt;/strong&gt; - profile every hook callback to find bottlenecks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Optimizer&lt;/strong&gt; - defer scripts, remove jQuery Migrate, disable dashicons, clean head&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://wpmultitool.com/blog/plugin-performance-score/" rel="noopener noreferrer"&gt;Plugin Performance Score&lt;/a&gt;&lt;/strong&gt; - see which of your plugins is the heaviest, right on the Plugins page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System Info&lt;/strong&gt; - PHP, MySQL, server config at a glance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Image Manager&lt;/strong&gt; - manage image sizes, remove unused ones&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shortcode Inspector&lt;/strong&gt; - find and test every shortcode on your site&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick Updater&lt;/strong&gt; - drag-drop plugin updates from ZIP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Package Downloader&lt;/strong&gt; - download any plugin/theme as ZIP&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plugin Reactivator&lt;/strong&gt; - one-click deactivate+reactivate for troubleshooting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard Widget Manager&lt;/strong&gt; - control what shows on the dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's &lt;a href="https://wpmultitool.com/blog/replaced-6-wordpress-plugins-with-one/" rel="noopener noreferrer"&gt;14 modules replacing what used to take 6 separate plugins&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side-by-Side Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;WP-Optimize (Free)&lt;/th&gt;
&lt;th&gt;WP-Optimize (Premium)&lt;/th&gt;
&lt;th&gt;WP Multitool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Database cleanup&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scheduled cleanup&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (more granular)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Image compression&lt;/td&gt;
&lt;td&gt;Yes (via reSmush.it)&lt;/td&gt;
&lt;td&gt;Yes + lazy loading&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Page caching&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes (advanced)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Autoload optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Slow query detection&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EXPLAIN analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Config management&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hook profiling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend optimization&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Plugin benchmarks&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;System diagnostics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multisite support&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$49-$199/year&lt;/td&gt;
&lt;td&gt;$199/year&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Notice something? WP-Optimize and WP Multitool barely overlap. The only shared feature is database cleanup. Everything else is different.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use Which
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use WP-Optimize when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You just need database cleanup and maybe image compression&lt;/li&gt;
&lt;li&gt;You want scheduled automatic cleanups&lt;/li&gt;
&lt;li&gt;You need page caching and don't want a separate caching plugin&lt;/li&gt;
&lt;li&gt;Budget is tight (free version covers the basics)&lt;/li&gt;
&lt;li&gt;You're running multisite (premium feature)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use WP Multitool when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database cleanup isn't solving your performance problems&lt;/li&gt;
&lt;li&gt;You need to understand WHY your site is slow, not just clean old data&lt;/li&gt;
&lt;li&gt;Autoload bloat is killing your memory usage&lt;/li&gt;
&lt;li&gt;You want one plugin instead of six separate tools&lt;/li&gt;
&lt;li&gt;You manage client sites and need debugging + optimization in one place&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use both when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Honestly? There's less reason to run both than with Query Monitor. WP Multitool's Database Optimizer covers the cleanup. But if you're already using WP-Optimize for image compression and caching, there's no conflict - they don't overlap on anything else.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Real Difference
&lt;/h2&gt;

&lt;p&gt;WP-Optimize is a janitor. It cleans up after the mess.&lt;/p&gt;

&lt;p&gt;WP Multitool is a mechanic. It finds what's broken and helps you fix it.&lt;/p&gt;

&lt;p&gt;Both are useful. But if your site is slow and you've already cleaned the database, the janitor can't help you anymore. You need someone who can look under the hood.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;WP-Optimize is on &lt;a href="https://wordpress.org/plugins/wp-optimize/" rel="noopener noreferrer"&gt;wordpress.org&lt;/a&gt; - solid choice if database cleanup is all you need.&lt;/p&gt;

&lt;p&gt;If you need more, &lt;a href="https://wpmultitool.com" rel="noopener noreferrer"&gt;check out WP Multitool&lt;/a&gt;. Use code &lt;strong&gt;startups2026&lt;/strong&gt; for 10% off.&lt;/p&gt;

&lt;p&gt;And if you're not sure whether your problem is old data or slow queries - read &lt;a href="https://wpmultitool.com/blog/why-caching-plugins-dont-fix-slow-wordpress/" rel="noopener noreferrer"&gt;why caching plugins don't fix slow WordPress sites&lt;/a&gt;. It might save you hours of troubleshooting.&lt;/p&gt;




&lt;p&gt;Originally published at &lt;a href="https://wpmultitool.com/blog/wp-multitool-vs-wp-optimize/" rel="noopener noreferrer"&gt;https://wpmultitool.com/blog/wp-multitool-vs-wp-optimize/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>performance</category>
      <category>database</category>
    </item>
    <item>
      <title>Query Monitor Shows You the Problem. It Won't Fix It.</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:27:57 +0000</pubDate>
      <link>https://dev.to/wpmultitool/query-monitor-shows-you-the-problem-it-wont-fix-it-33d</link>
      <guid>https://dev.to/wpmultitool/query-monitor-shows-you-the-problem-it-wont-fix-it-33d</guid>
      <description>&lt;p&gt;You found the slow query. Now what?&lt;/p&gt;

&lt;p&gt;That's the question I kept asking myself after staring at Query Monitor's panel for the hundredth time. It tells you which queries are slow. It shows you which plugin is responsible. It even highlights duplicates. But then it just... stops. If you've ever googled "query monitor alternative" hoping to find something that goes beyond diagnosis - this is the honest comparison I wish I'd had a year ago. Not a "our tool is better" sales pitch - an actual breakdown of when each tool makes sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Query Monitor Does Well
&lt;/h2&gt;

&lt;p&gt;Let me be clear - Query Monitor is an excellent plugin. John Blackbourn has maintained it for years, Automattic sponsors it, and it has 200,000+ active installs for a reason.&lt;/p&gt;

&lt;p&gt;Here's what QM gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Every database query on the current page&lt;/strong&gt; - with execution time, caller function, and component attribution&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP errors&lt;/strong&gt; with full stack traces&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP API calls&lt;/strong&gt; - response codes, timing, which plugin triggered them&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks and actions&lt;/strong&gt; - every callback attached, in order&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enqueued scripts and stylesheets&lt;/strong&gt; - including broken dependency chains&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Template hierarchy&lt;/strong&gt; - which template files loaded&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Environment info&lt;/strong&gt; - PHP version, database, server config&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conditional checks&lt;/strong&gt; - &lt;code&gt;is_single()&lt;/code&gt;, &lt;code&gt;is_home()&lt;/code&gt;, all of them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The v4.0 rewrite with Preact made the UI faster too. For quick debugging sessions - "why is this page loading 47 queries?" - nothing beats it.&lt;/p&gt;

&lt;p&gt;It's free, it's lightweight when you need it, and every WordPress developer should have it in their toolkit. I still use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where QM Stops
&lt;/h2&gt;

&lt;p&gt;Here's the problem. QM is a debugger. It shows you a snapshot of what's happening on one page, at one moment, while you're watching.&lt;/p&gt;

&lt;p&gt;That creates three blind spots:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. No Historical Data
&lt;/h3&gt;

&lt;p&gt;QM shows the current page load. Close the tab, the data is gone. You can't answer "are slow queries getting worse this month?" or "which queries spiked after Tuesday's update?" There's no log. No trends. No baseline to compare against.&lt;/p&gt;

&lt;p&gt;I've had situations where a client reports their site was slow yesterday evening. By the time I check, everything looks fine in QM. The slow query happened during a WooCommerce cron job at 11 PM. QM never saw it.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. No Production Monitoring
&lt;/h3&gt;

&lt;p&gt;QM is a dev tool. It adds overhead - it hooks into every query, every hook, every HTTP call to build its debug panel. That's fine during development, but you don't want that running on production 24/7.&lt;/p&gt;

&lt;p&gt;But slow queries don't happen in your local Docker container with 50 products. They happen on production with 50,000 products, 200 concurrent users, and a cron job running in the background. The exact environment where QM shouldn't be active.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. No Actionable Fixes
&lt;/h3&gt;

&lt;p&gt;This is the biggest one. QM tells you: "this query took 1.2 seconds." Ok. Now what?&lt;/p&gt;

&lt;p&gt;If you're a senior developer, you know to run EXPLAIN on it, check for missing indexes, maybe rewrite the query. But QM doesn't do any of that for you. It's a microscope, not a surgeon.&lt;/p&gt;

&lt;p&gt;For a site owner or a junior dev, that slow query number is basically useless information. You know something is wrong but you don't know how to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What WP Multitool Does Differently
&lt;/h2&gt;

&lt;p&gt;WP Multitool's &lt;a href="https://wpmultitool.com" rel="noopener noreferrer"&gt;Slow Query Analyzer&lt;/a&gt; approaches the problem from the other end. Instead of showing everything happening on one page, it continuously monitors for slow queries and then analyzes them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Always-On Monitoring
&lt;/h3&gt;

&lt;p&gt;A lightweight MU-plugin hooks into WordPress's query system and captures any query exceeding your threshold (default: 0.1 seconds). It uses WordPress's built-in &lt;code&gt;SAVEQUERIES&lt;/code&gt; constant, so it works with the same mechanism QM uses - but selectively.&lt;/p&gt;

&lt;p&gt;By default, it only monitors admin pages to keep overhead minimal. But you can flip the "Monitor Admin Only" toggle off, and it captures everything - frontend requests, cron jobs, REST API calls. That 11 PM WooCommerce cron job your client complained about? Logged. The query that only gets slow when &lt;code&gt;wp_options&lt;/code&gt; hits 500 autoloaded rows? Logged.&lt;/p&gt;

&lt;p&gt;Everything goes into a &lt;code&gt;wp_slow_query_log&lt;/code&gt; table with auto-purge at 5,000 entries, so it doesn't bloat your database.&lt;/p&gt;

&lt;h3&gt;
  
  
  EXPLAIN-Based Analysis
&lt;/h3&gt;

&lt;p&gt;Here's where it gets interesting. For each captured slow query, the analyzer runs MySQL's &lt;code&gt;EXPLAIN&lt;/code&gt; command and breaks down what's actually happening:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;EXPLAIN&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post_title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;meta_value&lt;/span&gt; 
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;wp_posts&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; 
&lt;span class="k"&gt;JOIN&lt;/span&gt; &lt;span class="n"&gt;wp_postmeta&lt;/span&gt; &lt;span class="n"&gt;pm&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;post_id&lt;/span&gt; 
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;meta_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'_price'&lt;/span&gt; 
&lt;span class="k"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;meta_value&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; 
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;meta_value&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then it gives you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A health score (1-10) based on the EXPLAIN output&lt;/li&gt;
&lt;li&gt;Whether it's doing a full table scan&lt;/li&gt;
&lt;li&gt;Which indexes exist and which are missing&lt;/li&gt;
&lt;li&gt;A ready-to-run &lt;code&gt;CREATE INDEX&lt;/code&gt; statement if one would help&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you've ever tried to &lt;a href="https://wpmultitool.com/blog/how-to-read-mysql-explain-wordpress/" rel="noopener noreferrer"&gt;read a MySQL EXPLAIN plan&lt;/a&gt; manually, you know it's not exactly beginner-friendly. The analyzer translates it into plain language.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analysis at Shutdown
&lt;/h3&gt;

&lt;p&gt;When a slow query is detected, the EXPLAIN analysis runs during WordPress's &lt;code&gt;shutdown&lt;/code&gt; hook - after the response has been sent to the browser. So the visitor gets their page, and then the analysis happens. For queries that need re-analysis, there's also a WP-Cron batch process that picks them up later.&lt;/p&gt;

&lt;h3&gt;
  
  
  It Doesn't Auto-Fix Anything
&lt;/h3&gt;

&lt;p&gt;This is important. WP Multitool suggests fixes - it will tell you "add this index" or "this query needs a rewrite." But it never runs those fixes automatically. You review, you decide, you execute. No surprises.&lt;/p&gt;

&lt;h2&gt;
  
  
  Side-by-Side Comparison
&lt;/h2&gt;

&lt;p&gt;Here's the honest breakdown:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Query Monitor&lt;/th&gt;
&lt;th&gt;WP Multitool (SQAA)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;See queries on current page&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PHP error tracking&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hook/action inspection&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Template hierarchy&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Script/style dependencies&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP API monitoring&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Persistent query logging&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Production-safe monitoring&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;EXPLAIN analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Index recommendations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Historical trends&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;No&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Post-response analysis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;N/A&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Yes&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overhead&lt;/td&gt;
&lt;td&gt;Moderate (hooks everything)&lt;/td&gt;
&lt;td&gt;Low (only slow queries)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$199/year (14 modules)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Active installs&lt;/td&gt;
&lt;td&gt;200,000+&lt;/td&gt;
&lt;td&gt;New&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Look at that table. QM wins on breadth of debugging data. WP Multitool wins on depth of query analysis and production monitoring. They're not really competing - they're solving different problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Use Which
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use Query Monitor when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're debugging a specific page that's loading slow right now&lt;/li&gt;
&lt;li&gt;You need to trace which plugin is enqueuing a broken script&lt;/li&gt;
&lt;li&gt;You want to see the full hook execution order&lt;/li&gt;
&lt;li&gt;You're developing locally and need real-time feedback&lt;/li&gt;
&lt;li&gt;You need to check template hierarchy or conditional functions&lt;/li&gt;
&lt;li&gt;Budget is zero (QM is free and always will be)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use WP Multitool when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need ongoing production monitoring for slow queries&lt;/li&gt;
&lt;li&gt;You want to know WHY a query is slow, not just THAT it's slow&lt;/li&gt;
&lt;li&gt;You need index recommendations you can actually implement&lt;/li&gt;
&lt;li&gt;Your client reports "the site was slow yesterday" and you need data&lt;/li&gt;
&lt;li&gt;You want historical trends to catch regressions after updates&lt;/li&gt;
&lt;li&gt;You also need &lt;a href="https://wpmultitool.com/blog/wp-options-autoload-trap/" rel="noopener noreferrer"&gt;autoload optimization&lt;/a&gt;, &lt;a href="https://wpmultitool.com/blog/stop-editing-wp-config-by-hand/" rel="noopener noreferrer"&gt;config management&lt;/a&gt;, &lt;a href="https://wpmultitool.com/blog/plugin-performance-score/" rel="noopener noreferrer"&gt;plugin performance scoring&lt;/a&gt;, and &lt;a href="https://wpmultitool.com/blog/replaced-6-wordpress-plugins-with-one/" rel="noopener noreferrer"&gt;11 other modules&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use both when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're a developer managing production WordPress sites. QM for active debugging sessions, WP Multitool for the 23 hours a day when you're not watching.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Real Question
&lt;/h2&gt;

&lt;p&gt;The comparison isn't really QM vs WP Multitool. It's debugging vs monitoring.&lt;/p&gt;

&lt;p&gt;Debugging is reactive. Something breaks, you investigate, you fix it, you move on. QM is perfect for this.&lt;/p&gt;

&lt;p&gt;Monitoring is proactive. You catch the problem before users complain - or better yet, before it becomes a problem. You see trends. You can prove that last week's plugin update added 3 slow queries that weren't there before. That's what the Slow Query Analyzer does.&lt;/p&gt;

&lt;p&gt;Most WordPress sites need both. A site without debugging tools is flying blind during development. A site without monitoring is flying blind in production.&lt;/p&gt;

&lt;p&gt;The difference is what happens between your debugging sessions. With QM alone, you have no idea what's happening while you're not looking. And in my experience, that's when the worst problems happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;Query Monitor is on &lt;a href="https://wordpress.org/plugins/query-monitor/" rel="noopener noreferrer"&gt;wordpress.org&lt;/a&gt; - install it if you haven't already. Seriously. Every developer should have it.&lt;/p&gt;

&lt;p&gt;WP Multitool ships the Slow Query Analyzer as one of 14 modules. &lt;a href="https://wpmultitool.com" rel="noopener noreferrer"&gt;Check it out at wpmultitool.com&lt;/a&gt; - and if the comparison here helped you decide, use code &lt;strong&gt;startups2026&lt;/strong&gt; for 10% off.&lt;/p&gt;

&lt;p&gt;If you're curious about reading those EXPLAIN plans yourself, I wrote a &lt;a href="https://wpmultitool.com/blog/how-to-read-mysql-explain-wordpress/" rel="noopener noreferrer"&gt;complete guide to MySQL EXPLAIN for WordPress&lt;/a&gt; that covers everything the analyzer does under the hood.&lt;/p&gt;

&lt;p&gt;And if you're wondering whether your site even has slow query problems - &lt;a href="https://wpmultitool.com/blog/why-caching-plugins-dont-fix-slow-wordpress/" rel="noopener noreferrer"&gt;caching alone won't save you&lt;/a&gt;. That's a different rabbit hole, but worth reading.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://wpmultitool.com/blog/wp-multitool-vs-query-monitor/" rel="noopener noreferrer"&gt;https://wpmultitool.com/blog/wp-multitool-vs-query-monitor/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>webdev</category>
      <category>performance</category>
      <category>database</category>
    </item>
    <item>
      <title>I Benchmarked 4,999 WordPress Plugins for Speed. Here Are the Results.</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:25:39 +0000</pubDate>
      <link>https://dev.to/wpmultitool/i-benchmarked-4999-wordpress-plugins-for-speed-here-are-the-results-271g</link>
      <guid>https://dev.to/wpmultitool/i-benchmarked-4999-wordpress-plugins-for-speed-here-are-the-results-271g</guid>
      <description>&lt;p&gt;I benchmarked 4,999 WordPress plugins for their exact speed impact. Here are the results.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup
&lt;/h2&gt;

&lt;p&gt;Each plugin was tested in a clean WordPress environment. Metrics captured:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TTFB (Time to First Byte) impact&lt;/li&gt;
&lt;li&gt;Database queries added per page load&lt;/li&gt;
&lt;li&gt;Memory usage overhead&lt;/li&gt;
&lt;li&gt;HTTP requests added&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No Lighthouse scores. No synthetic tests. Server-side measurement only.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Big Findings
&lt;/h2&gt;

&lt;h3&gt;
  
  
  WooCommerce scored F
&lt;/h3&gt;

&lt;p&gt;The most popular WordPress e-commerce plugin (5M+ active installs) is the heaviest plugin in the entire database. It adds &lt;strong&gt;19 database queries to every single page load&lt;/strong&gt; - not just product pages. Your blog post, your about page, your contact page - all taxed equally.&lt;/p&gt;

&lt;h3&gt;
  
  
  86% of plugins are fine
&lt;/h3&gt;

&lt;p&gt;2,357 plugins scored A. Another 1,945 scored A-. That's 86% with negligible performance impact.&lt;/p&gt;

&lt;p&gt;The popular advice of "fewer plugins = faster site" is wrong. It's not about count. It's about &lt;em&gt;which&lt;/em&gt; plugins you install.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 23x page builder gap
&lt;/h3&gt;

&lt;p&gt;Elementor adds approximately 47ms to every page load. Beaver Builder adds 2ms. Same category, same purpose, 23x performance difference.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contact Form 7 is invisible
&lt;/h3&gt;

&lt;p&gt;0ms added load time. 0 extra database queries. 0 additional memory. If every plugin developer built like CF7, nobody would need performance optimization plugins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Yoast SEO is surprisingly well-optimized
&lt;/h3&gt;

&lt;p&gt;Despite being massive in scope, Yoast scores A. Credit where it's due.&lt;/p&gt;

&lt;h2&gt;
  
  
  Score Distribution
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Count&lt;/th&gt;
&lt;th&gt;Percentage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;2,357&lt;/td&gt;
&lt;td&gt;47%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A-&lt;/td&gt;
&lt;td&gt;1,945&lt;/td&gt;
&lt;td&gt;39%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B+&lt;/td&gt;
&lt;td&gt;199&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;113&lt;/td&gt;
&lt;td&gt;2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B-&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C+&lt;/td&gt;
&lt;td&gt;67&lt;/td&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C-&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;0.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;0.06%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The F-Grade Plugins
&lt;/h2&gt;

&lt;p&gt;Only 3 plugins out of 4,999 scored F:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;WooCommerce&lt;/strong&gt; - 19 database queries per page load&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EditorsKit&lt;/strong&gt; - Gutenberg block toolkit&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cozy Blocks&lt;/strong&gt; - Another Gutenberg toolkit&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Notable Scores for Popular Plugins
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plugin&lt;/th&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Yoast SEO&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Well optimized despite scope&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wordfence Security&lt;/td&gt;
&lt;td&gt;A-&lt;/td&gt;
&lt;td&gt;Better than expected for a security plugin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contact Form 7&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Zero measurable impact&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Elementor&lt;/td&gt;
&lt;td&gt;C-&lt;/td&gt;
&lt;td&gt;Heavy page builder&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jetpack Boost&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;Ironic for a "speed" plugin&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All in One SEO&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;Significant overhead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WooCommerce&lt;/td&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;19 queries per page&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The Database
&lt;/h2&gt;

&lt;p&gt;The full database is free to search at &lt;a href="https://makewpfast.com" rel="noopener noreferrer"&gt;makewpfast.com&lt;/a&gt;. No signup, no paywall. Look up any of the 4,999 tested plugins before you install them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Methodology
&lt;/h2&gt;

&lt;p&gt;Each test runs on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clean WordPress install (latest version)&lt;/li&gt;
&lt;li&gt;Default theme (Twenty Twenty-Four)&lt;/li&gt;
&lt;li&gt;PHP 8.3, MySQL 8.0&lt;/li&gt;
&lt;li&gt;Measured with SAVEQUERIES + server-side timing&lt;/li&gt;
&lt;li&gt;5 page loads per test, averaged&lt;/li&gt;
&lt;li&gt;Scores are relative to baseline (clean WP with no plugins)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you think the methodology could be improved, I'm genuinely interested in feedback.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I built this as part of &lt;a href="https://makewpfast.com" rel="noopener noreferrer"&gt;MakeWPFast&lt;/a&gt;, a WordPress plugin performance database. I also maintain &lt;a href="https://wpmultitool.com" rel="noopener noreferrer"&gt;WP Multitool&lt;/a&gt; - a developer toolkit for WordPress performance optimization.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>performance</category>
      <category>webdev</category>
      <category>database</category>
    </item>
    <item>
      <title>Emergency WordPress Recovery: What to Do When Your Site Goes Down</title>
      <dc:creator>WP Multitool</dc:creator>
      <pubDate>Wed, 08 Apr 2026 12:14:35 +0000</pubDate>
      <link>https://dev.to/wpmultitool/emergency-wordpress-recovery-what-to-do-when-your-site-goes-down-8n9</link>
      <guid>https://dev.to/wpmultitool/emergency-wordpress-recovery-what-to-do-when-your-site-goes-down-8n9</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://makewpfast.com/emergency-wordpress-recovery-what-to-do-when-your-site-goes-down/" rel="noopener noreferrer"&gt;https://makewpfast.com/emergency-wordpress-recovery-what-to-do-when-your-site-goes-down/&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Your site is down. Visitors see an error page. Revenue is dropping by the minute. Panic sets in. Here is your emergency action plan — a calm, systematic approach to getting your WordPress site back online as fast as possible.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Confirm the Outage (30 seconds)
&lt;/h2&gt;

&lt;p&gt;Before doing anything, verify the site is actually down and it is not just your connection:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Try from a different device or network (mobile data)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use an external uptime checker like downfor.io or isitdown.site&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check if it is the entire site or just wp-admin&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Identify the Error (2 minutes)
&lt;/h2&gt;

&lt;p&gt;The error message tells you where to look:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;White screen&lt;/strong&gt; → PHP fatal error (check error logs)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;500 Internal Server Error&lt;/strong&gt; → Server-side issue (check error logs, .htaccess)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;502/504 Gateway Timeout&lt;/strong&gt; → PHP-FPM crashed or overloaded&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Database connection error&lt;/strong&gt; → MySQL is down or credentials are wrong&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;“Briefly unavailable for maintenance”&lt;/strong&gt; → Stuck update (delete .maintenance file)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;403 Forbidden&lt;/strong&gt; → Permission issue or security plugin lockout&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DNS or SSL error&lt;/strong&gt; → Domain/hosting configuration issue&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Apply the Targeted Fix
&lt;/h2&gt;

&lt;h3&gt;
  
  
  PHP Fatal Error / White Screen
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Check &lt;code&gt;wp-content/debug.log&lt;/code&gt; or server error log&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rename the offending plugin/theme folder via FTP/SSH&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you cannot identify the cause, rename the entire &lt;code&gt;plugins&lt;/code&gt; folder&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Database Connection Error
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Verify MySQL is running: &lt;code&gt;systemctl status mysql&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check &lt;code&gt;wp-config.php&lt;/code&gt; credentials match your database&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check if the database disk is full: &lt;code&gt;df -h&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Stuck Maintenance Mode
&lt;/h3&gt;

&lt;p&gt;Delete the &lt;code&gt;.maintenance&lt;/code&gt; file in your WordPress root directory. That is it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security Plugin Lockout
&lt;/h3&gt;

&lt;p&gt;If a security plugin (Wordfence, Sucuri, iThemes) locked you out, rename its folder via FTP/SSH to deactivate it. Then log in and reconfigure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Verify the Fix
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Load the homepage&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Log into wp-admin&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test key functionality (forms, checkout, login)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the error log for new errors&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  When You Cannot Fix It Yourself
&lt;/h2&gt;

&lt;p&gt;If you have gone through these steps and your site is still down — or if you do not have FTP/SSH access — you need professional help fast. &lt;a href="https://fix-wp.com" rel="noopener noreferrer"&gt;fix-wp.com&lt;/a&gt; is built for exactly this moment. Submit your site, and AI-powered diagnostics identify and fix the issue, usually within an hour. A full backup is created before any changes, you get live progress updates, and you only pay if the fix works.&lt;/p&gt;

&lt;h2&gt;
  
  
  After Recovery: Build Your Safety Net
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Set up automated daily backups (and test restoring them)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable uptime monitoring with instant alerts&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep a recovery document with your hosting credentials and emergency steps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintain a staging environment for testing changes before they go live&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every site goes down eventually. The difference between an hour of downtime and a day of downtime is preparation.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    Get WordPress Performance Tips
    Join developers and agency owners who get backend optimization strategies, tool releases, and deep-dive guides.





        Join Free


    No spam. Unsubscribe anytime. We respect your privacy.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>wordpress</category>
      <category>performance</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
